Skip to content

Commit a46a2a8

Browse files
committed
rac2: squash datadriven command parsing
Epic: none Release note: none
1 parent 505c9d5 commit a46a2a8

File tree

7 files changed

+85
-140
lines changed

7 files changed

+85
-140
lines changed

pkg/kv/kvserver/kvflowcontrol/rac2/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ go_test(
7171
"//pkg/settings/cluster",
7272
"//pkg/testutils",
7373
"//pkg/testutils/datapathutils",
74+
"//pkg/testutils/dd",
7475
"//pkg/testutils/echotest",
7576
"//pkg/util/admission/admissionpb",
7677
"//pkg/util/asciitsdb",

pkg/kv/kvserver/kvflowcontrol/rac2/log_tracker_test.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"github.com/cockroachdb/cockroach/pkg/raft/raftpb"
1313
"github.com/cockroachdb/cockroach/pkg/testutils/datapathutils"
14+
"github.com/cockroachdb/cockroach/pkg/testutils/dd"
1415
"github.com/cockroachdb/cockroach/pkg/util/leaktest"
1516
"github.com/cockroachdb/cockroach/pkg/util/log"
1617
"github.com/cockroachdb/datadriven"
@@ -191,19 +192,18 @@ func TestLogTracker(t *testing.T) {
191192
defer log.Scope(t).Close(t)
192193

193194
readPri := func(t *testing.T, d *datadriven.TestData) raftpb.Priority {
194-
var s string
195-
d.ScanArgs(t, "pri", &s)
195+
s := dd.ScanArg[string](t, d, "pri")
196196
pri := priFromString(s)
197197
if pri == raftpb.NumPriorities {
198198
t.Fatalf("unknown pri: %s", s)
199199
}
200200
return pri
201201
}
202202
readMark := func(t *testing.T, d *datadriven.TestData, idxName string) LogMark {
203-
var mark LogMark
204-
d.ScanArgs(t, "term", &mark.Term)
205-
d.ScanArgs(t, idxName, &mark.Index)
206-
return mark
203+
return LogMark{
204+
Term: dd.ScanArg[uint64](t, d, "term"),
205+
Index: dd.ScanArg[uint64](t, d, idxName),
206+
}
207207
}
208208

209209
var tracker LogTracker
@@ -230,8 +230,7 @@ func TestLogTracker(t *testing.T) {
230230
return state(false)
231231

232232
case "append": // Example: append term=10 after=100 to=200
233-
var after uint64
234-
d.ScanArgs(t, "after", &after)
233+
after := dd.ScanArg[uint64](t, d, "after")
235234
to := readMark(t, d, "to")
236235
updated := tracker.Append(ctx, after, to)
237236
return state(updated)

pkg/kv/kvserver/kvflowcontrol/rac2/range_controller_test.go

Lines changed: 52 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/cockroachdb/cockroach/pkg/roachpb"
3131
"github.com/cockroachdb/cockroach/pkg/settings/cluster"
3232
"github.com/cockroachdb/cockroach/pkg/testutils/datapathutils"
33+
"github.com/cockroachdb/cockroach/pkg/testutils/dd"
3334
"github.com/cockroachdb/cockroach/pkg/util/admission/admissionpb"
3435
"github.com/cockroachdb/cockroach/pkg/util/hlc"
3536
"github.com/cockroachdb/cockroach/pkg/util/humanizeutil"
@@ -1122,42 +1123,32 @@ func TestRangeController(t *testing.T) {
11221123
datadriven.RunTest(t, path, func(t *testing.T, d *datadriven.TestData) string {
11231124
switch d.Cmd {
11241125
case "init":
1125-
var (
1126-
regularInitString, elasticInitString string
1127-
regularLimitString, elasticLimitString string
1128-
)
1129-
d.MaybeScanArgs(t, "regular_init", &regularInitString)
1130-
d.MaybeScanArgs(t, "elastic_init", &elasticInitString)
1131-
d.MaybeScanArgs(t, "regular_limit", &regularLimitString)
1132-
d.MaybeScanArgs(t, "elastic_limit", &elasticLimitString)
11331126
// If the test specifies different token limits or initial token counts
11341127
// (default is the limit), then we override the default limit and also
11351128
// store the initial token count. tokenCounters are created
11361129
// dynamically, so we update them on the fly as well.
1137-
if regularLimitString != "" {
1138-
regularLimit, err := humanizeutil.ParseBytes(regularLimitString)
1130+
if str, ok := dd.ScanArgOpt[string](t, d, "regular_init"); ok {
1131+
regularInit, err := humanizeutil.ParseBytes(str)
11391132
require.NoError(t, err)
1140-
kvflowcontrol.RegularTokensPerStream.Override(ctx, &state.settings.SV, regularLimit)
1133+
state.initialRegularTokens = kvflowcontrol.Tokens(regularInit)
11411134
}
1142-
if elasticLimitString != "" {
1143-
elasticLimit, err := humanizeutil.ParseBytes(elasticLimitString)
1135+
if str, ok := dd.ScanArgOpt[string](t, d, "elastic_init"); ok {
1136+
elasticInit, err := humanizeutil.ParseBytes(str)
11441137
require.NoError(t, err)
1145-
kvflowcontrol.ElasticTokensPerStream.Override(ctx, &state.settings.SV, elasticLimit)
1138+
state.initialElasticTokens = kvflowcontrol.Tokens(elasticInit)
11461139
}
1147-
if regularInitString != "" {
1148-
regularInit, err := humanizeutil.ParseBytes(regularInitString)
1140+
if str, ok := dd.ScanArgOpt[string](t, d, "regular_limit"); ok {
1141+
regularLimit, err := humanizeutil.ParseBytes(str)
11491142
require.NoError(t, err)
1150-
state.initialRegularTokens = kvflowcontrol.Tokens(regularInit)
1143+
kvflowcontrol.RegularTokensPerStream.Override(ctx, &state.settings.SV, regularLimit)
11511144
}
1152-
if elasticInitString != "" {
1153-
elasticInit, err := humanizeutil.ParseBytes(elasticInitString)
1145+
if str, ok := dd.ScanArgOpt[string](t, d, "elastic_limit"); ok {
1146+
elasticLimit, err := humanizeutil.ParseBytes(str)
11541147
require.NoError(t, err)
1155-
state.initialElasticTokens = kvflowcontrol.Tokens(elasticInit)
1148+
kvflowcontrol.ElasticTokensPerStream.Override(ctx, &state.settings.SV, elasticLimit)
11561149
}
1157-
var maxInflightBytesString string
1158-
d.MaybeScanArgs(t, "max_inflight_bytes", &maxInflightBytesString)
1159-
if maxInflightBytesString != "" {
1160-
maxInflightBytes, err := humanizeutil.ParseBytes(maxInflightBytesString)
1150+
if str, ok := dd.ScanArgOpt[string](t, d, "max_inflight_bytes"); ok {
1151+
maxInflightBytes, err := humanizeutil.ParseBytes(str)
11611152
require.NoError(t, err)
11621153
state.maxInflightBytes = uint64(maxInflightBytes)
11631154
}
@@ -1168,34 +1159,26 @@ func TestRangeController(t *testing.T) {
11681159
return state.rangeStateString() + state.tokenCountsString()
11691160

11701161
case "tick":
1171-
var durationStr string
1172-
d.ScanArgs(t, "duration", &durationStr)
1173-
duration, err := time.ParseDuration(durationStr)
1174-
require.NoError(t, err)
1162+
duration := dd.ScanArg[time.Duration](t, d, "duration")
11751163
state.ts.Advance(duration)
11761164
// Sleep for a bit to allow any timers to fire.
11771165
time.Sleep(20 * time.Millisecond)
11781166
return fmt.Sprintf("now=%v", humanizeutil.Duration(
11791167
state.ts.Now().Sub(timeutil.UnixEpoch)))
11801168

11811169
case "wait_for_eval":
1182-
var rangeID int
1183-
var name, priString string
1184-
d.ScanArgs(t, "range_id", &rangeID)
1185-
d.ScanArgs(t, "name", &name)
1186-
d.ScanArgs(t, "pri", &priString)
1187-
testRC := state.ranges[roachpb.RangeID(rangeID)]
1188-
testRC.startWaitForEval(name, parsePriority(t, priString))
1170+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
1171+
name := dd.ScanArg[string](t, d, "name")
1172+
pri := parsePriority(t, dd.ScanArg[string](t, d, "pri"))
1173+
1174+
state.ranges[rangeID].startWaitForEval(name, pri)
11891175
return state.evalStateString()
11901176

11911177
case "check_state":
11921178
return state.evalStateString()
11931179

11941180
case "adjust_tokens":
1195-
eval := true
1196-
if d.HasArg("send") {
1197-
eval = false
1198-
}
1181+
eval := !d.HasArg("send")
11991182
for _, line := range strings.Split(d.Input, "\n") {
12001183
parts := strings.Fields(line)
12011184
parts[0] = strings.TrimSpace(parts[0])
@@ -1237,11 +1220,9 @@ func TestRangeController(t *testing.T) {
12371220
return state.tokenCountsString()
12381221

12391222
case "cancel_context":
1240-
var rangeID int
1241-
var name string
1242-
d.ScanArgs(t, "range_id", &rangeID)
1243-
d.ScanArgs(t, "name", &name)
1244-
testRC := state.ranges[roachpb.RangeID(rangeID)]
1223+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
1224+
name := dd.ScanArg[string](t, d, "name")
1225+
testRC := state.ranges[rangeID]
12451226
func() {
12461227
testRC.mu.Lock()
12471228
defer testRC.mu.Unlock()
@@ -1278,27 +1259,25 @@ func TestRangeController(t *testing.T) {
12781259
return state.rangeStateString()
12791260

12801261
case "set_leaseholder":
1281-
var rangeID, replicaID int
1282-
d.ScanArgs(t, "range_id", &rangeID)
1283-
d.ScanArgs(t, "replica_id", &replicaID)
1284-
testRC := state.ranges[roachpb.RangeID(rangeID)]
1262+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
1263+
replicaID := dd.ScanArg[roachpb.ReplicaID](t, d, "replica_id")
1264+
testRC := state.ranges[rangeID]
12851265
func() {
12861266
testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Lock()
12871267
defer testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Unlock()
1288-
testRC.rc.SetLeaseholderRaftMuLocked(ctx, roachpb.ReplicaID(replicaID))
1268+
testRC.rc.SetLeaseholderRaftMuLocked(ctx, replicaID)
12891269
}()
12901270
return state.rangeStateString()
12911271

12921272
case "set_force_flush_index":
1293-
var rangeID int
1294-
d.ScanArgs(t, "range_id", &rangeID)
1295-
var index int
1296-
d.ScanArgs(t, "index", &index)
1273+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
1274+
index := dd.ScanArg[int](t, d, "index")
12971275
mode := MsgAppPull
12981276
if d.HasArg("push-mode") {
12991277
mode = MsgAppPush
13001278
}
1301-
testRC := state.ranges[roachpb.RangeID(rangeID)]
1279+
1280+
testRC := state.ranges[rangeID]
13021281
func() {
13031282
testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Lock()
13041283
defer testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Unlock()
@@ -1316,7 +1295,7 @@ func TestRangeController(t *testing.T) {
13161295
}()
13171296
// Sleep for a bit to allow any timers to fire.
13181297
time.Sleep(20 * time.Millisecond)
1319-
return state.sendStreamString(roachpb.RangeID(rangeID))
1298+
return state.sendStreamString(rangeID)
13201299

13211300
case "close_rcs":
13221301
for _, r := range state.ranges {
@@ -1474,44 +1453,40 @@ func TestRangeController(t *testing.T) {
14741453
case "internal_schedule_replica":
14751454
// scheduleReplica is called internally by replicaSendStream. Calling
14761455
// this here is artificial.
1477-
var rangeID, replicaID int
1478-
d.ScanArgs(t, "range_id", &rangeID)
1479-
d.ScanArgs(t, "replica_id", &replicaID)
1480-
testRC := state.ranges[roachpb.RangeID(rangeID)]
1456+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
1457+
replicaID := dd.ScanArg[roachpb.ReplicaID](t, d, "replica_id")
1458+
testRC := state.ranges[rangeID]
14811459
func() {
14821460
testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Lock()
14831461
defer testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Unlock()
1484-
testRC.rc.scheduleReplica(roachpb.ReplicaID(replicaID))
1462+
testRC.rc.scheduleReplica(replicaID)
14851463
}()
1486-
return state.sendStreamString(roachpb.RangeID(rangeID))
1464+
return state.sendStreamString(rangeID)
14871465

14881466
case "handle_scheduler_event":
1489-
var rangeID int
1490-
d.ScanArgs(t, "range_id", &rangeID)
1491-
testRC := state.ranges[roachpb.RangeID(rangeID)]
1467+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
14921468
mode := MsgAppPull
14931469
if d.HasArg("push-mode") {
14941470
mode = MsgAppPush
14951471
}
1472+
testRC := state.ranges[rangeID]
14961473
func() {
14971474
testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Lock()
14981475
defer testRC.rc.opts.ReplicaMutexAsserter.RaftMu.Unlock()
14991476
testRC.rc.HandleSchedulerEventRaftMuLocked(ctx, mode, testRC.logSnapshot())
15001477
}()
15011478
// Sleep for a bit to allow any timers to fire.
15021479
time.Sleep(20 * time.Millisecond)
1503-
return state.sendStreamString(roachpb.RangeID(rangeID))
1480+
return state.sendStreamString(rangeID)
15041481

15051482
case "stream_state":
1506-
var rangeID int
1507-
d.ScanArgs(t, "range_id", &rangeID)
1483+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
15081484
// Sleep for a bit to allow any timers to fire.
15091485
time.Sleep(20 * time.Millisecond)
1510-
return state.sendStreamString(roachpb.RangeID(rangeID))
1486+
return state.sendStreamString(rangeID)
15111487

15121488
case "metrics":
1513-
typ := "eval"
1514-
d.MaybeScanArgs(t, "type", &typ)
1489+
typ := dd.ScanArgOr(t, d, "type", "eval")
15151490
var buf strings.Builder
15161491

15171492
switch typ {
@@ -1574,11 +1549,10 @@ func TestRangeController(t *testing.T) {
15741549
return buf.String()
15751550

15761551
case "inspect":
1577-
var rangeID int
1578-
d.ScanArgs(t, "range_id", &rangeID)
1552+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
15791553
var handle kvflowinspectpb.Handle
15801554
func() {
1581-
rc := state.ranges[roachpb.RangeID(rangeID)].rc
1555+
rc := state.ranges[rangeID].rc
15821556
rc.opts.ReplicaMutexAsserter.RaftMu.Lock()
15831557
defer rc.opts.ReplicaMutexAsserter.RaftMu.Unlock()
15841558
handle = rc.InspectRaftMuLocked(ctx)
@@ -1588,14 +1562,10 @@ func TestRangeController(t *testing.T) {
15881562
return fmt.Sprintf("%v", marshaled)
15891563

15901564
case "send_stream_stats":
1591-
var (
1592-
rangeID int
1593-
refresh = true
1594-
)
1595-
d.ScanArgs(t, "range_id", &rangeID)
1596-
d.MaybeScanArgs(t, "refresh", &refresh)
1565+
rangeID := dd.ScanArg[roachpb.RangeID](t, d, "range_id")
1566+
refresh := dd.ScanArgOr(t, d, "refresh", false)
15971567

1598-
r := state.ranges[roachpb.RangeID(rangeID)]
1568+
r := state.ranges[rangeID]
15991569
if refresh {
16001570
func() {
16011571
r.rc.opts.ReplicaMutexAsserter.RaftMu.Lock()
@@ -1622,14 +1592,10 @@ func TestRangeController(t *testing.T) {
16221592
return buf.String()
16231593

16241594
case "set_flow_control_config":
1625-
if d.HasArg("enabled") {
1626-
var enabled bool
1627-
d.ScanArgs(t, "enabled", &enabled)
1595+
if enabled, ok := dd.ScanArgOpt[bool](t, d, "enabled"); ok {
16281596
kvflowcontrol.Enabled.Override(ctx, &state.settings.SV, enabled)
16291597
}
1630-
if d.HasArg("mode") {
1631-
var mode string
1632-
d.ScanArgs(t, "mode", &mode)
1598+
if mode, ok := dd.ScanArgOpt[string](t, d, "mode"); ok {
16331599
var m kvflowcontrol.ModeT
16341600
switch mode {
16351601
case "apply_to_all":

pkg/kv/kvserver/kvflowcontrol/rac2/simulation_test.go

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/cockroachdb/cockroach/pkg/raft/tracker"
2020
"github.com/cockroachdb/cockroach/pkg/roachpb"
2121
"github.com/cockroachdb/cockroach/pkg/testutils/datapathutils"
22+
"github.com/cockroachdb/cockroach/pkg/testutils/dd"
2223
"github.com/cockroachdb/cockroach/pkg/util/admission/admissionpb"
2324
"github.com/cockroachdb/cockroach/pkg/util/asciitsdb"
2425
"github.com/cockroachdb/cockroach/pkg/util/leaktest"
@@ -279,8 +280,7 @@ func TestUsingSimulation(t *testing.T) {
279280
if d.HasArg("t") {
280281
// Parse t=[<duration>,<duration>), but ignoring the
281282
// start time.
282-
var tstr string
283-
d.ScanArgs(t, "t", &tstr)
283+
tstr := dd.ScanArg[string](t, d, "t")
284284
tstr = strings.TrimSuffix(strings.TrimPrefix(tstr, "["), ")")
285285
args := strings.Split(tstr, ",")
286286
dur, err := time.ParseDuration(args[1])
@@ -298,16 +298,9 @@ func TestUsingSimulation(t *testing.T) {
298298
return buf.String()
299299

300300
case "plot":
301-
var h, w, p = 15, 40, 1
302-
if d.HasArg("height") {
303-
d.ScanArgs(t, "height", &h)
304-
}
305-
if d.HasArg("width") {
306-
d.ScanArgs(t, "width", &w)
307-
}
308-
if d.HasArg("precision") {
309-
d.ScanArgs(t, "precision", &p)
310-
}
301+
h := dd.ScanArgOr(t, d, "height", 15)
302+
w := dd.ScanArgOr(t, d, "width", 40)
303+
p := dd.ScanArgOr(t, d, "precision", 1)
311304

312305
var buf strings.Builder
313306
for i, line := range strings.Split(d.Input, "\n") {
@@ -369,10 +362,8 @@ func TestUsingSimulation(t *testing.T) {
369362
default:
370363
}
371364

372-
if d.HasArg("t") {
365+
if tstr, ok := dd.ScanArgOpt[string](t, d, "t"); ok {
373366
// Parse t=[<duration>,<duration>).
374-
var tstr string
375-
d.ScanArgs(t, "t", &tstr)
376367
tstr = strings.TrimSuffix(strings.TrimPrefix(tstr, "["), ")")
377368
args := strings.Split(tstr, ",")
378369

@@ -395,8 +386,7 @@ func TestUsingSimulation(t *testing.T) {
395386
return buf.String()
396387

397388
case "snapshots":
398-
var name string
399-
d.ScanArgs(t, "handle", &name)
389+
name := dd.ScanArg[string](t, d, "handle")
400390
rangeID, ok := handleToRangeID[name]
401391
require.True(t, ok, "expected to find handle %q, was it initialized?", name)
402392
handle := sim.state.ranges[rangeID]

0 commit comments

Comments
 (0)