@@ -36,6 +36,7 @@ import (
3636 "github.com/cockroachdb/cockroach/pkg/storage/enginepb"
3737 "github.com/cockroachdb/cockroach/pkg/testutils"
3838 "github.com/cockroachdb/cockroach/pkg/testutils/datapathutils"
39+ "github.com/cockroachdb/cockroach/pkg/testutils/dd"
3940 "github.com/cockroachdb/cockroach/pkg/util/allstacks"
4041 "github.com/cockroachdb/cockroach/pkg/util/hlc"
4142 "github.com/cockroachdb/cockroach/pkg/util/leaktest"
@@ -105,15 +106,9 @@ func TestConcurrencyManagerBasic(t *testing.T) {
105106 datadriven .RunTest (t , path , func (t * testing.T , d * datadriven.TestData ) string {
106107 switch d .Cmd {
107108 case "new-txn" :
108- var txnName string
109- d .ScanArgs (t , "name" , & txnName )
109+ txnName := dd .ScanArg [string ](t , d , "name" )
110110 ts := scanTimestamp (t , d )
111-
112- epoch := 0
113- if d .HasArg ("epoch" ) {
114- d .ScanArgs (t , "epoch" , & epoch )
115- }
116-
111+ epoch := dd .ScanArgOr [enginepb.TxnEpoch ](t , d , "epoch" , 0 )
117112 iso := concurrency .ScanIsoLevel (t , d )
118113 priority := scanTxnPriority (t , d )
119114
@@ -133,7 +128,7 @@ func TestConcurrencyManagerBasic(t *testing.T) {
133128 TxnMeta : enginepb.TxnMeta {
134129 ID : id ,
135130 IsoLevel : iso ,
136- Epoch : enginepb . TxnEpoch ( epoch ) ,
131+ Epoch : epoch ,
137132 WriteTimestamp : ts ,
138133 MinTimestamp : ts ,
139134 Priority : priority ,
@@ -145,14 +140,12 @@ func TestConcurrencyManagerBasic(t *testing.T) {
145140 return ""
146141
147142 case "new-request" :
148- var reqName string
149- d .ScanArgs (t , "name" , & reqName )
143+ reqName := dd .ScanArg [string ](t , d , "name" )
150144 if _ , ok := c .requestsByName [reqName ]; ok {
151145 d .Fatalf (t , "duplicate request: %s" , reqName )
152146 }
153147
154- var txnName string
155- d .ScanArgs (t , "txn" , & txnName )
148+ txnName := dd .ScanArg [string ](t , d , "txn" )
156149 txn , ok := c .txnsByName [txnName ]
157150 if ! ok && txnName != "none" {
158151 d .Fatalf (t , "unknown txn %s" , txnName )
@@ -182,15 +175,8 @@ func TestConcurrencyManagerBasic(t *testing.T) {
182175 lockTimeout = 1 * time .Nanosecond
183176 }
184177
185- var maxLockWaitQueueLength int
186- if d .HasArg ("max-lock-wait-queue-length" ) {
187- d .ScanArgs (t , "max-lock-wait-queue-length" , & maxLockWaitQueueLength )
188- }
189-
190- var deadlockTimeout time.Duration
191- if d .HasArg ("deadlock-timeout" ) {
192- d .ScanArgs (t , "deadlock-timeout" , & deadlockTimeout )
193- }
178+ maxLockWaitQueueLength := dd .ScanArgOr (t , d , "max-lock-wait-queue-length" , 0 )
179+ deadlockTimeout := dd .ScanArgOr [time.Duration ](t , d , "deadlock-timeout" , 0 )
194180
195181 ba := & kvpb.BatchRequest {}
196182 pp := scanPoisonPolicy (t , d )
@@ -225,16 +211,13 @@ func TestConcurrencyManagerBasic(t *testing.T) {
225211 return ""
226212
227213 case "sequence" :
228- var reqName string
229- d .ScanArgs (t , "req" , & reqName )
214+ reqName := dd .ScanArg [string ](t , d , "req" )
230215 req , ok := c .requestsByName [reqName ]
231216 if ! ok {
232217 d .Fatalf (t , "unknown request: %s" , reqName )
233218 }
234219 evalKind := concurrency .PessimisticEval
235- if d .HasArg ("eval-kind" ) {
236- var kind string
237- d .ScanArgs (t , "eval-kind" , & kind )
220+ if kind , ok := dd .ScanArgOpt [string ](t , d , "eval-kind" ); ok {
238221 switch kind {
239222 case "pess" :
240223 evalKind = concurrency .PessimisticEval
@@ -277,8 +260,7 @@ func TestConcurrencyManagerBasic(t *testing.T) {
277260 return c .waitAndCollect (t , mon )
278261
279262 case "finish" :
280- var reqName string
281- d .ScanArgs (t , "req" , & reqName )
263+ reqName := dd .ScanArg [string ](t , d , "req" )
282264 guard , ok := c .guardsByReqName [reqName ]
283265 if ! ok {
284266 d .Fatalf (t , "unknown request: %s" , reqName )
@@ -295,8 +277,7 @@ func TestConcurrencyManagerBasic(t *testing.T) {
295277 return c .waitAndCollect (t , mon )
296278
297279 case "poison" :
298- var reqName string
299- d .ScanArgs (t , "req" , & reqName )
280+ reqName := dd .ScanArg [string ](t , d , "req" )
300281 guard , ok := c .guardsByReqName [reqName ]
301282 if ! ok {
302283 d .Fatalf (t , "unknown request: %s" , reqName )
@@ -310,15 +291,13 @@ func TestConcurrencyManagerBasic(t *testing.T) {
310291 return c .waitAndCollect (t , mon )
311292
312293 case "handle-lock-conflict-error" :
313- var reqName string
314- d .ScanArgs (t , "req" , & reqName )
294+ reqName := dd .ScanArg [string ](t , d , "req" )
315295 prev , ok := c .guardsByReqName [reqName ]
316296 if ! ok {
317297 d .Fatalf (t , "unknown request: %s" , reqName )
318298 }
319299
320- var leaseSeq int
321- d .ScanArgs (t , "lease-seq" , & leaseSeq )
300+ leaseSeq := dd .ScanArg [roachpb.LeaseSequence ](t , d , "lease-seq" )
322301
323302 // Each roachpb.Lock is provided on an indented line.
324303 var locks []roachpb.Lock
@@ -333,15 +312,12 @@ func TestConcurrencyManagerBasic(t *testing.T) {
333312 d .Fatalf (t , "expected \" lock\" , found %s" , d .Cmd )
334313 }
335314
336- var txnName string
337- d .ScanArgs (t , "txn" , & txnName )
315+ txnName := dd .ScanArg [string ](t , d , "txn" )
338316 txn , ok := c .txnsByName [txnName ]
339317 if ! ok {
340318 d .Fatalf (t , "unknown txn %s" , txnName )
341319 }
342-
343- var key string
344- d .ScanArgs (t , "key" , & key )
320+ key := dd .ScanArg [string ](t , d , "key" )
345321
346322 str := lock .Intent
347323 if d .HasArg ("str" ) {
@@ -352,9 +328,8 @@ func TestConcurrencyManagerBasic(t *testing.T) {
352328
353329 opName := fmt .Sprintf ("handle lock conflict error %s" , reqName )
354330 mon .runAsync (opName , func (ctx context.Context ) {
355- seq := roachpb .LeaseSequence (leaseSeq )
356331 lcErr := & kvpb.LockConflictError {Locks : locks }
357- guard , err := m .HandleLockConflictError (ctx , prev , seq , lcErr )
332+ guard , err := m .HandleLockConflictError (ctx , prev , leaseSeq , lcErr )
358333 if err != nil {
359334 log .Eventf (ctx , "handled %v, returned error: %v" , lcErr , err )
360335 c .mu .Lock ()
@@ -370,8 +345,7 @@ func TestConcurrencyManagerBasic(t *testing.T) {
370345 return c .waitAndCollect (t , mon )
371346
372347 case "check-opt-no-conflicts" :
373- var reqName string
374- d .ScanArgs (t , "req" , & reqName )
348+ reqName := dd .ScanArg [string ](t , d , "req" )
375349 g , ok := c .guardsByReqName [reqName ]
376350 if ! ok {
377351 d .Fatalf (t , "unknown request: %s" , reqName )
@@ -381,14 +355,12 @@ func TestConcurrencyManagerBasic(t *testing.T) {
381355 return fmt .Sprintf ("no-conflicts: %t" , g .CheckOptimisticNoConflicts (latchSpans , lockSpans ))
382356
383357 case "is-key-locked-by-conflicting-txn" :
384- var reqName string
385- d .ScanArgs (t , "req" , & reqName )
358+ reqName := dd .ScanArg [string ](t , d , "req" )
386359 g , ok := c .guardsByReqName [reqName ]
387360 if ! ok {
388361 d .Fatalf (t , "unknown request: %s" , reqName )
389362 }
390- var key string
391- d .ScanArgs (t , "key" , & key )
363+ key := dd .ScanArg [string ](t , d , "key" )
392364 // TODO(nvanbenschoten): replace with scanLockStrength.
393365 strength := concurrency .ScanLockStrength (t , d )
394366 ok , txn , err := g .IsKeyLockedByConflictingTxn (context .Background (), roachpb .Key (key ), strength )
@@ -405,22 +377,15 @@ func TestConcurrencyManagerBasic(t *testing.T) {
405377 return "locked: false"
406378
407379 case "on-lock-acquired" :
408- var reqName string
409- d .ScanArgs (t , "req" , & reqName )
380+ reqName := dd .ScanArg [string ](t , d , "req" )
410381 guard , ok := c .guardsByReqName [reqName ]
411382 if ! ok {
412383 d .Fatalf (t , "unknown request: %s" , reqName )
413384 }
414385 txn := guard .Req .Txn
415386
416- var key string
417- d .ScanArgs (t , "key" , & key )
418-
419- var seq int
420- if d .HasArg ("seq" ) {
421- d .ScanArgs (t , "seq" , & seq )
422- }
423- seqNum := enginepb .TxnSeq (seq )
387+ key := dd .ScanArg [string ](t , d , "key" )
388+ seqNum := dd .ScanArgOr [enginepb.TxnSeq ](t , d , "seq" , 0 )
424389
425390 // Consider locks to be unreplicated if unspecified.
426391 dur := lock .Unreplicated
@@ -469,29 +434,25 @@ func TestConcurrencyManagerBasic(t *testing.T) {
469434 return c .waitAndCollect (t , mon )
470435
471436 case "on-lock-updated" :
472- var reqName string
473- d .ScanArgs (t , "req" , & reqName )
437+ reqName := dd .ScanArg [string ](t , d , "req" )
474438 guard , ok := c .guardsByReqName [reqName ]
475439 if ! ok {
476440 d .Fatalf (t , "unknown request: %s" , reqName )
477441 }
478442
479- var txnName string
480- d .ScanArgs (t , "txn" , & txnName )
443+ txnName := dd .ScanArg [string ](t , d , "txn" )
481444 txn , ok := c .txnsByName [txnName ]
482445 if ! ok {
483446 d .Fatalf (t , "unknown txn %s" , txnName )
484447 }
485-
486- var key string
487- d .ScanArgs (t , "key" , & key )
448+ key := dd .ScanArg [string ](t , d , "key" )
488449
489450 status , verb := scanTxnStatus (t , d )
490451 var ts hlc.Timestamp
491452 if d .HasArg ("ts" ) {
492453 ts = scanTimestamp (t , d )
493454 }
494- ignoredSeqNums := scanIgnoredSeqNumbers (t , d )
455+ ignoredSeqNums := concurrency . ScanIgnoredSeqNumbers (t , d )
495456
496457 // Confirm that the request has a corresponding ResolveIntent.
497458 found := false
@@ -522,8 +483,7 @@ func TestConcurrencyManagerBasic(t *testing.T) {
522483 return c .waitAndCollect (t , mon )
523484
524485 case "on-txn-updated" :
525- var txnName string
526- d .ScanArgs (t , "txn" , & txnName )
486+ txnName := dd .ScanArg [string ](t , d , "txn" )
527487 txn , ok := c .txnsByName [txnName ]
528488 if ! ok {
529489 d .Fatalf (t , "unknown txn %s" , txnName )
@@ -553,27 +513,23 @@ func TestConcurrencyManagerBasic(t *testing.T) {
553513 return c .waitAndCollect (t , mon )
554514
555515 case "on-lease-updated" :
556- var isLeaseholder bool
557- d .ScanArgs (t , "leaseholder" , & isLeaseholder )
558-
559- var leaseSeq int
560- d .ScanArgs (t , "lease-seq" , & leaseSeq )
516+ isLeaseholder := dd .ScanArgOr (t , d , "leaseholder" , false )
517+ leaseSeq := dd .ScanArgOr [roachpb.LeaseSequence ](t , d , "lease-seq" , 0 )
561518
562519 mon .runSync ("transfer lease" , func (ctx context.Context ) {
563520 if isLeaseholder {
564521 log .Event (ctx , "acquired" )
565522 } else {
566523 log .Event (ctx , "released" )
567524 }
568- m .OnRangeLeaseUpdated (roachpb . LeaseSequence ( leaseSeq ) , isLeaseholder )
525+ m .OnRangeLeaseUpdated (leaseSeq , isLeaseholder )
569526 })
570527 return c .waitAndCollect (t , mon )
571528
572529 case "on-split" :
573530 mon .runSync ("split range" , func (ctx context.Context ) {
574531 log .Event (ctx , "complete" )
575- var endKeyStr string
576- d .ScanArgs (t , "key" , & endKeyStr )
532+ endKeyStr := dd .ScanArg [string ](t , d , "key" )
577533 locks := m .OnRangeSplit (roachpb .Key (endKeyStr ))
578534 if len (locks ) > 0 {
579535 log .Eventf (ctx , "range split returned %d locks for re-acquistion" , len (locks ))
@@ -611,37 +567,31 @@ func TestConcurrencyManagerBasic(t *testing.T) {
611567 return ""
612568
613569 case "debug-set-clock" :
614- var secs int
615- d .ScanArgs (t , "ts" , & secs )
616-
617- if int64 (secs ) < c .manual .Now ().Unix () {
570+ secs := dd .ScanArg [int64 ](t , d , "ts" )
571+ if secs < c .manual .Now ().Unix () {
618572 d .Fatalf (t , "manual clock must advance" )
619573 }
620- c .manual .MustAdvanceTo (timeutil .Unix (int64 ( secs ) , 0 ))
574+ c .manual .MustAdvanceTo (timeutil .Unix (secs , 0 ))
621575 return ""
622576
623577 case "debug-advance-clock" :
624- var secs int
625- d .ScanArgs (t , "ts" , & secs )
578+ secs := dd .ScanArg [int64 ](t , d , "ts" )
626579 c .manual .Advance (time .Duration (secs ) * time .Second )
627580 return ""
628581
629582 case "debug-set-discovered-locks-threshold-to-consult-txn-status-cache" :
630- var n int
631- d .ScanArgs (t , "n" , & n )
583+ n := dd .ScanArg [int ](t , d , "n" )
632584 c .setDiscoveredLocksThresholdToConsultTxnStatusCache (n )
633585 return ""
634586
635587 case "debug-set-batch-pushed-lock-resolution-enabled" :
636- var ok bool
637- d .ScanArgs (t , "ok" , & ok )
588+ ok := dd .ScanArg [bool ](t , d , "ok" )
638589 c .setBatchPushedLockResolutionEnabled (ok )
639590 return ""
640591
641592 case "debug-set-max-locks" :
642- var n int
643- d .ScanArgs (t , "n" , & n )
644- m .SetMaxLockTableSize (int64 (n ))
593+ n := dd .ScanArg [int64 ](t , d , "n" )
594+ m .SetMaxLockTableSize (n )
645595 return ""
646596
647597 case "reset" :
0 commit comments