Skip to content

Commit cc90010

Browse files
authored
Merge pull request #19807 from serathius/refactor-txn
Extract ensureTrace function
2 parents aa8238f + 6608dfb commit cc90010

File tree

1 file changed

+25
-33
lines changed

1 file changed

+25
-33
lines changed

server/etcdserver/txn/txn.go

+25-33
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,10 @@ import (
3333
)
3434

3535
func Put(ctx context.Context, lg *zap.Logger, lessor lease.Lessor, kv mvcc.KV, p *pb.PutRequest) (resp *pb.PutResponse, trace *traceutil.Trace, err error) {
36-
trace = traceutil.Get(ctx)
37-
// create put tracing if the trace in context is empty
38-
if trace.IsEmpty() {
39-
trace = traceutil.New("put",
40-
lg,
41-
traceutil.Field{Key: "key", Value: string(p.Key)},
42-
traceutil.Field{Key: "req_size", Value: p.Size()},
43-
)
44-
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
45-
}
36+
ctx, trace = ensureTrace(ctx, lg, "put",
37+
traceutil.Field{Key: "key", Value: string(p.Key)},
38+
traceutil.Field{Key: "req_size", Value: p.Size()},
39+
)
4640
leaseID := lease.LeaseID(p.Lease)
4741
if leaseID != lease.NoLease {
4842
if l := lessor.Lookup(leaseID); l == nil {
@@ -95,16 +89,10 @@ func put(ctx context.Context, txnWrite mvcc.TxnWrite, p *pb.PutRequest) (resp *p
9589
}
9690

9791
func DeleteRange(ctx context.Context, lg *zap.Logger, kv mvcc.KV, dr *pb.DeleteRangeRequest) (resp *pb.DeleteRangeResponse, trace *traceutil.Trace, err error) {
98-
trace = traceutil.Get(ctx)
99-
// create delete tracing if the trace in context is empty
100-
if trace.IsEmpty() {
101-
trace = traceutil.New("delete_range",
102-
lg,
103-
traceutil.Field{Key: "key", Value: string(dr.Key)},
104-
traceutil.Field{Key: "range_end", Value: string(dr.RangeEnd)},
105-
)
106-
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
107-
}
92+
ctx, trace = ensureTrace(ctx, lg, "delete_range",
93+
traceutil.Field{Key: "key", Value: string(dr.Key)},
94+
traceutil.Field{Key: "range_end", Value: string(dr.RangeEnd)},
95+
)
10896
txnWrite := kv.Write(trace)
10997
defer txnWrite.End()
11098
resp, err = deleteRange(ctx, txnWrite, dr)
@@ -134,11 +122,7 @@ func deleteRange(ctx context.Context, txnWrite mvcc.TxnWrite, dr *pb.DeleteRange
134122
}
135123

136124
func Range(ctx context.Context, lg *zap.Logger, kv mvcc.KV, r *pb.RangeRequest) (resp *pb.RangeResponse, trace *traceutil.Trace, err error) {
137-
trace = traceutil.Get(ctx)
138-
if trace.IsEmpty() {
139-
trace = traceutil.New("range", lg)
140-
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
141-
}
125+
ctx, trace = ensureTrace(ctx, lg, "range")
142126
defer func(start time.Time) {
143127
success := err == nil
144128
RangeSecObserve(success, time.Since(start))
@@ -249,12 +233,8 @@ func executeRange(ctx context.Context, lg *zap.Logger, txnRead mvcc.TxnRead, r *
249233
return resp, nil
250234
}
251235

252-
func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWithSharedBuffer bool, kv mvcc.KV, lessor lease.Lessor) (*pb.TxnResponse, *traceutil.Trace, error) {
253-
trace := traceutil.Get(ctx)
254-
if trace.IsEmpty() {
255-
trace = traceutil.New("transaction", lg)
256-
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
257-
}
236+
func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWithSharedBuffer bool, kv mvcc.KV, lessor lease.Lessor) (txnResp *pb.TxnResponse, trace *traceutil.Trace, err error) {
237+
ctx, trace = ensureTrace(ctx, lg, "transaction")
258238
isWrite := !IsTxnReadonly(rt)
259239
// When the transaction contains write operations, we use ReadTx instead of
260240
// ConcurrentReadTx to avoid extra overhead of copying buffer.
@@ -275,7 +255,7 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
275255
if isWrite {
276256
trace.AddField(traceutil.Field{Key: "read_only", Value: false})
277257
}
278-
_, err := checkTxn(txnRead, rt, lessor, txnPath)
258+
_, err = checkTxn(txnRead, rt, lessor, txnPath)
279259
if err != nil {
280260
txnRead.End()
281261
return nil, nil, err
@@ -292,7 +272,7 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
292272
} else {
293273
txnWrite = mvcc.NewReadOnlyTxnWrite(txnRead)
294274
}
295-
txnResp, err := txn(ctx, lg, txnWrite, rt, isWrite, txnPath)
275+
txnResp, err = txn(ctx, lg, txnWrite, rt, isWrite, txnPath)
296276
txnWrite.End()
297277

298278
trace.AddField(
@@ -721,3 +701,15 @@ func checkTxnReqsPermission(as auth.AuthStore, ai *auth.AuthInfo, reqs []*pb.Req
721701

722702
return nil
723703
}
704+
705+
func ensureTrace(ctx context.Context, lg *zap.Logger, operation string, fields ...traceutil.Field) (context.Context, *traceutil.Trace) {
706+
trace := traceutil.Get(ctx)
707+
if trace.IsEmpty() {
708+
trace = traceutil.New(operation,
709+
lg,
710+
fields...,
711+
)
712+
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
713+
}
714+
return ctx, trace
715+
}

0 commit comments

Comments
 (0)