该方法是 applierV3backend
类型中负责处理 Put
操作的核心逻辑,Put
操作将键值对写入存储,同时支持设置租约、忽略值或租约、获取前值等功能。
文章目录
一、完整源码
func (a *applierV3backend) Put(ctx context.Context, txn mvcc.TxnWrite, p *pb.PutRequest) (resp *pb.PutResponse, trace *traceutil.Trace, err error) {
resp = &pb.PutResponse{
}
resp.Header = &pb.ResponseHeader{
}
trace = traceutil.Get(ctx)
// create put tracing if the trace in context is empty
if trace.IsEmpty() {
trace = traceutil.New("put",
a.s.Logger(),
traceutil.Field{
Key: "key", Value: string(p.Key)},
traceutil.Field{
Key: "req_size", Value: p.Size()},
)
}
val, leaseID := p.Value, lease.LeaseID(p.Lease)
if txn == nil {
if leaseID != lease.NoLease {
if l := a.s.lessor.Lookup(leaseID); l == nil {
return nil, nil, lease.ErrLeaseNotFound
}
}
txn = a.s.KV().Write(trace)
defer txn