Skip to content

Commit aefb89b

Browse files
committed
Combine common txn arguments into TxnContext
Signed-off-by: Marek Siarkowicz <[email protected]>
1 parent 58086da commit aefb89b

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

server/etcdserver/txn/txn.go

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,31 @@ import (
3232
"go.etcd.io/etcd/server/v3/storage/mvcc"
3333
)
3434

35-
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) {
35+
type TxnContext struct {
36+
Logger *zap.Logger
37+
Lessor lease.Lessor
38+
KV mvcc.KV
39+
TxnModeWriteWithSharedBuffer bool
40+
}
41+
42+
func Put(ctx context.Context, txn TxnContext, p *pb.PutRequest) (resp *pb.PutResponse, trace *traceutil.Trace, err error) {
3643
trace = traceutil.Get(ctx)
3744
// create put tracing if the trace in context is empty
3845
if trace.IsEmpty() {
3946
trace = traceutil.New("put",
40-
lg,
47+
txn.Logger,
4148
traceutil.Field{Key: "key", Value: string(p.Key)},
4249
traceutil.Field{Key: "req_size", Value: p.Size()},
4350
)
4451
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
4552
}
4653
leaseID := lease.LeaseID(p.Lease)
4754
if leaseID != lease.NoLease {
48-
if l := lessor.Lookup(leaseID); l == nil {
55+
if l := txn.Lessor.Lookup(leaseID); l == nil {
4956
return nil, nil, lease.ErrLeaseNotFound
5057
}
5158
}
52-
txnWrite := kv.Write(trace)
59+
txnWrite := txn.KV.Write(trace)
5360
defer txnWrite.End()
5461
resp, err = put(ctx, txnWrite, p)
5562
return resp, trace, err
@@ -94,18 +101,18 @@ func put(ctx context.Context, txnWrite mvcc.TxnWrite, p *pb.PutRequest) (resp *p
94101
return resp, nil
95102
}
96103

97-
func DeleteRange(ctx context.Context, lg *zap.Logger, kv mvcc.KV, dr *pb.DeleteRangeRequest) (resp *pb.DeleteRangeResponse, trace *traceutil.Trace, err error) {
104+
func DeleteRange(ctx context.Context, txn TxnContext, dr *pb.DeleteRangeRequest) (resp *pb.DeleteRangeResponse, trace *traceutil.Trace, err error) {
98105
trace = traceutil.Get(ctx)
99106
// create delete tracing if the trace in context is empty
100107
if trace.IsEmpty() {
101108
trace = traceutil.New("delete_range",
102-
lg,
109+
txn.Logger,
103110
traceutil.Field{Key: "key", Value: string(dr.Key)},
104111
traceutil.Field{Key: "range_end", Value: string(dr.RangeEnd)},
105112
)
106113
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
107114
}
108-
txnWrite := kv.Write(trace)
115+
txnWrite := txn.KV.Write(trace)
109116
defer txnWrite.End()
110117
resp, err = deleteRange(ctx, txnWrite, dr)
111118
return resp, trace, err
@@ -133,19 +140,19 @@ func deleteRange(ctx context.Context, txnWrite mvcc.TxnWrite, dr *pb.DeleteRange
133140
return resp, nil
134141
}
135142

136-
func Range(ctx context.Context, lg *zap.Logger, kv mvcc.KV, r *pb.RangeRequest) (resp *pb.RangeResponse, trace *traceutil.Trace, err error) {
143+
func Range(ctx context.Context, txn TxnContext, r *pb.RangeRequest) (resp *pb.RangeResponse, trace *traceutil.Trace, err error) {
137144
trace = traceutil.Get(ctx)
138145
if trace.IsEmpty() {
139-
trace = traceutil.New("range", lg)
146+
trace = traceutil.New("range", txn.Logger)
140147
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
141148
}
142149
defer func(start time.Time) {
143150
success := err == nil
144151
RangeSecObserve(success, time.Since(start))
145152
}(time.Now())
146-
txnRead := kv.Read(mvcc.ConcurrentReadTxMode, trace)
153+
txnRead := txn.KV.Read(mvcc.ConcurrentReadTxMode, trace)
147154
defer txnRead.End()
148-
resp, err = executeRange(ctx, lg, txnRead, r)
155+
resp, err = executeRange(ctx, txn.Logger, txnRead, r)
149156
return resp, trace, err
150157
}
151158

@@ -249,22 +256,22 @@ func executeRange(ctx context.Context, lg *zap.Logger, txnRead mvcc.TxnRead, r *
249256
return resp, nil
250257
}
251258

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) {
259+
func Txn(ctx context.Context, txn TxnContext, rt *pb.TxnRequest) (*pb.TxnResponse, *traceutil.Trace, error) {
253260
trace := traceutil.Get(ctx)
254261
if trace.IsEmpty() {
255-
trace = traceutil.New("transaction", lg)
262+
trace = traceutil.New("transaction", txn.Logger)
256263
ctx = context.WithValue(ctx, traceutil.TraceKey{}, trace)
257264
}
258265
isWrite := !IsTxnReadonly(rt)
259266
// When the transaction contains write operations, we use ReadTx instead of
260267
// ConcurrentReadTx to avoid extra overhead of copying buffer.
261268
var mode mvcc.ReadTxMode
262-
if isWrite && txnModeWriteWithSharedBuffer /*a.s.Cfg.ServerFeatureGate.Enabled(features.TxnModeWriteWithSharedBuffer)*/ {
269+
if isWrite && txn.TxnModeWriteWithSharedBuffer /*a.s.Cfg.ServerFeatureGate.Enabled(features.TxnModeWriteWithSharedBuffer)*/ {
263270
mode = mvcc.SharedBufReadTxMode
264271
} else {
265272
mode = mvcc.ConcurrentReadTxMode
266273
}
267-
txnRead := kv.Read(mode, trace)
274+
txnRead := txn.KV.Read(mode, trace)
268275
var txnPath []bool
269276
trace.StepWithFunction(
270277
func() {
@@ -275,7 +282,7 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
275282
if isWrite {
276283
trace.AddField(traceutil.Field{Key: "read_only", Value: false})
277284
}
278-
_, err := checkTxn(txnRead, rt, lessor, txnPath)
285+
_, err := checkTxn(txnRead, rt, txn.Lessor, txnPath)
279286
if err != nil {
280287
txnRead.End()
281288
return nil, nil, err
@@ -288,11 +295,11 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
288295
var txnWrite mvcc.TxnWrite
289296
if isWrite {
290297
txnRead.End()
291-
txnWrite = kv.Write(trace)
298+
txnWrite = txn.KV.Write(trace)
292299
} else {
293300
txnWrite = mvcc.NewReadOnlyTxnWrite(txnRead)
294301
}
295-
txnResp, err := txn(ctx, lg, txnWrite, rt, isWrite, txnPath)
302+
txnResp, err := assembleTxnResponse(ctx, txn.Logger, txnWrite, rt, isWrite, txnPath)
296303
txnWrite.End()
297304

298305
trace.AddField(
@@ -302,7 +309,7 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
302309
return txnResp, trace, err
303310
}
304311

305-
func txn(ctx context.Context, lg *zap.Logger, txnWrite mvcc.TxnWrite, rt *pb.TxnRequest, isWrite bool, txnPath []bool) (*pb.TxnResponse, error) {
312+
func assembleTxnResponse(ctx context.Context, lg *zap.Logger, txnWrite mvcc.TxnWrite, rt *pb.TxnRequest, isWrite bool, txnPath []bool) (*pb.TxnResponse, error) {
306313
txnResp, _ := newTxnResp(rt, txnPath)
307314
_, err := executeTxn(ctx, lg, txnWrite, rt, txnPath, txnResp)
308315
if err != nil {

0 commit comments

Comments
 (0)