@@ -32,18 +32,25 @@ import (
32
32
"go.etcd.io/etcd/server/v3/storage/mvcc"
33
33
)
34
34
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 ) {
36
- ctx , trace = ensureTrace (ctx , lg , "put" ,
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 ) {
43
+ ctx , trace = ensureTrace (ctx , txn .Logger , "put" ,
37
44
traceutil.Field {Key : "key" , Value : string (p .Key )},
38
45
traceutil.Field {Key : "req_size" , Value : p .Size ()},
39
46
)
40
47
leaseID := lease .LeaseID (p .Lease )
41
48
if leaseID != lease .NoLease {
42
- if l := lessor .Lookup (leaseID ); l == nil {
49
+ if l := txn . Lessor .Lookup (leaseID ); l == nil {
43
50
return nil , nil , lease .ErrLeaseNotFound
44
51
}
45
52
}
46
- txnWrite := kv .Write (trace )
53
+ txnWrite := txn . KV .Write (trace )
47
54
defer txnWrite .End ()
48
55
resp , err = put (ctx , txnWrite , p )
49
56
return resp , trace , err
@@ -88,12 +95,12 @@ func put(ctx context.Context, txnWrite mvcc.TxnWrite, p *pb.PutRequest) (resp *p
88
95
return resp , nil
89
96
}
90
97
91
- func DeleteRange (ctx context.Context , lg * zap. Logger , kv mvcc. KV , dr * pb.DeleteRangeRequest ) (resp * pb.DeleteRangeResponse , trace * traceutil.Trace , err error ) {
92
- ctx , trace = ensureTrace (ctx , lg , "delete_range" ,
98
+ func DeleteRange (ctx context.Context , txn TxnContext , dr * pb.DeleteRangeRequest ) (resp * pb.DeleteRangeResponse , trace * traceutil.Trace , err error ) {
99
+ ctx , trace = ensureTrace (ctx , txn . Logger , "delete_range" ,
93
100
traceutil.Field {Key : "key" , Value : string (dr .Key )},
94
101
traceutil.Field {Key : "range_end" , Value : string (dr .RangeEnd )},
95
102
)
96
- txnWrite := kv .Write (trace )
103
+ txnWrite := txn . KV .Write (trace )
97
104
defer txnWrite .End ()
98
105
resp , err = deleteRange (ctx , txnWrite , dr )
99
106
return resp , trace , err
@@ -121,15 +128,15 @@ func deleteRange(ctx context.Context, txnWrite mvcc.TxnWrite, dr *pb.DeleteRange
121
128
return resp , nil
122
129
}
123
130
124
- func Range (ctx context.Context , lg * zap. Logger , kv mvcc. KV , r * pb.RangeRequest ) (resp * pb.RangeResponse , trace * traceutil.Trace , err error ) {
125
- ctx , trace = ensureTrace (ctx , lg , "range" )
131
+ func Range (ctx context.Context , txn TxnContext , r * pb.RangeRequest ) (resp * pb.RangeResponse , trace * traceutil.Trace , err error ) {
132
+ ctx , trace = ensureTrace (ctx , txn . Logger , "range" )
126
133
defer func (start time.Time ) {
127
134
success := err == nil
128
135
RangeSecObserve (success , time .Since (start ))
129
136
}(time .Now ())
130
- txnRead := kv .Read (mvcc .ConcurrentReadTxMode , trace )
137
+ txnRead := txn . KV .Read (mvcc .ConcurrentReadTxMode , trace )
131
138
defer txnRead .End ()
132
- resp , err = executeRange (ctx , lg , txnRead , r )
139
+ resp , err = executeRange (ctx , txn . Logger , txnRead , r )
133
140
return resp , trace , err
134
141
}
135
142
@@ -233,18 +240,18 @@ func executeRange(ctx context.Context, lg *zap.Logger, txnRead mvcc.TxnRead, r *
233
240
return resp , nil
234
241
}
235
242
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" )
243
+ func Txn (ctx context.Context , txn TxnContext , rt * pb.TxnRequest ) (txnResp * pb.TxnResponse , trace * traceutil.Trace , err error ) {
244
+ ctx , trace = ensureTrace (ctx , txn . Logger , "transaction" )
238
245
isWrite := ! IsTxnReadonly (rt )
239
246
// When the transaction contains write operations, we use ReadTx instead of
240
247
// ConcurrentReadTx to avoid extra overhead of copying buffer.
241
248
var mode mvcc.ReadTxMode
242
- if isWrite && txnModeWriteWithSharedBuffer /*a.s.Cfg.ServerFeatureGate.Enabled(features.TxnModeWriteWithSharedBuffer)*/ {
249
+ if isWrite && txn . TxnModeWriteWithSharedBuffer /*a.s.Cfg.ServerFeatureGate.Enabled(features.TxnModeWriteWithSharedBuffer)*/ {
243
250
mode = mvcc .SharedBufReadTxMode
244
251
} else {
245
252
mode = mvcc .ConcurrentReadTxMode
246
253
}
247
- txnRead := kv .Read (mode , trace )
254
+ txnRead := txn . KV .Read (mode , trace )
248
255
var txnPath []bool
249
256
trace .StepWithFunction (
250
257
func () {
@@ -255,7 +262,7 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
255
262
if isWrite {
256
263
trace .AddField (traceutil.Field {Key : "read_only" , Value : false })
257
264
}
258
- _ , err = checkTxn (txnRead , rt , lessor , txnPath )
265
+ _ , err = checkTxn (txnRead , rt , txn . Lessor , txnPath )
259
266
if err != nil {
260
267
txnRead .End ()
261
268
return nil , nil , err
@@ -268,11 +275,11 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
268
275
var txnWrite mvcc.TxnWrite
269
276
if isWrite {
270
277
txnRead .End ()
271
- txnWrite = kv .Write (trace )
278
+ txnWrite = txn . KV .Write (trace )
272
279
} else {
273
280
txnWrite = mvcc .NewReadOnlyTxnWrite (txnRead )
274
281
}
275
- txnResp , err = txn (ctx , lg , txnWrite , rt , isWrite , txnPath )
282
+ txnResp , err = assembleTxnResponse (ctx , txn . Logger , txnWrite , rt , isWrite , txnPath )
276
283
txnWrite .End ()
277
284
278
285
trace .AddField (
@@ -282,7 +289,7 @@ func Txn(ctx context.Context, lg *zap.Logger, rt *pb.TxnRequest, txnModeWriteWit
282
289
return txnResp , trace , err
283
290
}
284
291
285
- func txn (ctx context.Context , lg * zap.Logger , txnWrite mvcc.TxnWrite , rt * pb.TxnRequest , isWrite bool , txnPath []bool ) (* pb.TxnResponse , error ) {
292
+ func assembleTxnResponse (ctx context.Context , lg * zap.Logger , txnWrite mvcc.TxnWrite , rt * pb.TxnRequest , isWrite bool , txnPath []bool ) (* pb.TxnResponse , error ) {
286
293
txnResp , _ := newTxnResp (rt , txnPath )
287
294
_ , err := executeTxn (ctx , lg , txnWrite , rt , txnPath , txnResp )
288
295
if err != nil {
0 commit comments