Skip to content

Commit 5473503

Browse files
committed
concurrency: use dd helpers in concurrency_manager_test
Epic: none Release note: none
1 parent e70bf03 commit 5473503

File tree

2 files changed

+51
-121
lines changed

2 files changed

+51
-121
lines changed

pkg/kv/kvserver/concurrency/concurrency_manager_test.go

Lines changed: 40 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)