Skip to content

Commit 6146f0b

Browse files
mh0ltclaude
andauthored
[bal-devnet-3] cmd/utils, node/cli: add --exec.serial flag to clamp workers to 1 (#20863)
Cherry-pick of #20853 to bal-devnet-3. Depends on #20862 (#20797 cherry-pick). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b74710a commit 6146f0b

3 files changed

Lines changed: 35 additions & 1 deletion

File tree

cmd/utils/flags.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,11 @@ var (
11651165
Usage: "Parallel executor worker count (equivalent to EXEC3_WORKERS). Default: half the number of CPU cores, other half reserved for snapshots build/merge/prune.",
11661166
Value: runtime.NumCPU() / 2,
11671167
}
1168+
ExecSerialFlag = cli.BoolFlag{
1169+
Name: "exec.serial",
1170+
Usage: "Force serial execution by clamping the parallel executor to a single worker. Wins over --exec.workers and EXEC3_WORKERS — use to disable parallelism for diagnostics or like-for-like baseline comparisons.",
1171+
Value: false,
1172+
}
11681173
ExecNoMergeFlag = cli.BoolFlag{
11691174
Name: "exec.no-merge",
11701175
Usage: "Disable state-aggregator file merges for Domain / History / Inverted-Index (equivalent to NO_MERGE=true). Diagnostic / perf-comparison use only.",
@@ -2003,6 +2008,11 @@ func SetEthConfig(ctx *cli.Context, nodeConfig *nodecfg.Config, cfg *ethconfig.C
20032008
dbg.SetExec3Workers(n)
20042009
cfg.ExecWorkerCount = n
20052010
}
2011+
// --exec.serial wins over --exec.workers / EXEC3_WORKERS: clamp to 1.
2012+
if ctx.IsSet(ExecSerialFlag.Name) && ctx.Bool(ExecSerialFlag.Name) {
2013+
dbg.SetExec3Workers(1)
2014+
cfg.ExecWorkerCount = 1
2015+
}
20062016
if ctx.IsSet(ExecNoMergeFlag.Name) {
20072017
dbg.SetNoMerge(ctx.Bool(ExecNoMergeFlag.Name))
20082018
}

cmd/utils/flags_test.go

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ func TestExecPerfFlags_OverrideDbg(t *testing.T) {
132132
if ctx.IsSet(ExecWorkersFlag.Name) {
133133
dbg.SetExec3Workers(ctx.Int(ExecWorkersFlag.Name))
134134
}
135+
if ctx.IsSet(ExecSerialFlag.Name) && ctx.Bool(ExecSerialFlag.Name) {
136+
dbg.SetExec3Workers(1)
137+
}
135138
if ctx.IsSet(ExecNoMergeFlag.Name) {
136139
dbg.SetNoMerge(ctx.Bool(ExecNoMergeFlag.Name))
137140
}
@@ -145,7 +148,7 @@ func TestExecPerfFlags_OverrideDbg(t *testing.T) {
145148
app := cli.NewApp()
146149
app.Flags = []cli.Flag{
147150
&ExecBatchedIOFlag, &ExecStateCacheFlag, &ExecWorkersFlag,
148-
&ExecNoMergeFlag, &ExecNoPruneFlag,
151+
&ExecSerialFlag, &ExecNoMergeFlag, &ExecNoPruneFlag,
149152
}
150153
app.Action = apply
151154
require.NoError(t, app.Run(append([]string{"test"}, args...)))
@@ -195,6 +198,26 @@ func TestExecPerfFlags_OverrideDbg(t *testing.T) {
195198
require.Equal(t, 7, dbg.Exec3Workers)
196199
})
197200

201+
t.Run("serial=true clamps Exec3Workers to 1", func(t *testing.T) {
202+
dbg.SetExec3Workers(8)
203+
run("--exec.serial=true")
204+
require.Equal(t, 1, dbg.Exec3Workers)
205+
})
206+
207+
t.Run("serial=true wins over --exec.workers", func(t *testing.T) {
208+
dbg.SetExec3Workers(1)
209+
// flags are applied in declaration order (workers first, then serial),
210+
// so serial should override workers regardless of CLI argument order.
211+
run("--exec.workers=12", "--exec.serial=true")
212+
require.Equal(t, 1, dbg.Exec3Workers)
213+
})
214+
215+
t.Run("serial=false leaves Exec3Workers untouched", func(t *testing.T) {
216+
dbg.SetExec3Workers(8)
217+
run("--exec.serial=false")
218+
require.Equal(t, 8, dbg.Exec3Workers)
219+
})
220+
198221
t.Run("no-merge and no-prune set to true", func(t *testing.T) {
199222
dbg.SetNoMerge(false)
200223
dbg.SetNoPrune(false)

node/cli/default_flags.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ var DefaultFlags = []cli.Flag{
5050
&utils.ExecBatchedIOFlag,
5151
&utils.ExecStateCacheFlag,
5252
&utils.ExecWorkersFlag,
53+
&utils.ExecSerialFlag,
5354
&utils.ExecNoMergeFlag,
5455
&utils.ExecNoPruneFlag,
5556
&BatchSizeFlag,

0 commit comments

Comments
 (0)