Skip to content

Commit ad75d83

Browse files
committed
test(ci): expand serial group and throttle disk-heavy suites
Scheduling-sensitive suites (rekey, crash/recovery, GC, snapshot, compaction, nonce/counter anchors) were only partially pinned to the serial group, so contention under a fully parallel runner could shift task ordering and surface as false failures. Real-disk VFS and structural-stress suites are now capped to a small disk-heavy group instead of running fully parallel, avoiding I/O oversubscription without forcing them fully serial.
1 parent bee32e6 commit ad75d83

1 file changed

Lines changed: 41 additions & 2 deletions

File tree

.config/nextest.toml

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,49 @@
11
[profile.default]
2-
# Serial group for crash / recovery tests (used by later slices).
2+
# Everything not pinned to a group below runs at full parallelism.
33
test-threads = "num-cpus"
44

5+
# ── Invariant-critical, scheduling-sensitive suites run one at a time ─────────
6+
# These exercise multi-phase async flows where correctness depends on precise
7+
# task/commit ordering: rekey epoch transitions, crash/recovery replay, the
8+
# apply-journal, GC reader-pin drains, snapshot/compaction publication, and the
9+
# nonce/counter anchors. Under heavy CPU contention (a fully parallel CI runner)
10+
# their internal task scheduling shifts and latent ordering races surface as
11+
# false failures — e.g. a rekey aborting with an unverifiable-header corruption.
12+
# Pinning them to a single-threaded group removes that contention so a failure
13+
# here means a real invariant break, not a co-tenant starving the runtime.
514
[[profile.default.overrides]]
6-
filter = "test(/crash/)"
15+
filter = """
16+
binary(crash_basic)
17+
| binary(recovery_basic)
18+
| binary(rekey_basic)
19+
| binary(fsck_deep)
20+
| binary(durability)
21+
| binary(snapshot_basic)
22+
| binary(compaction_basic)
23+
| binary(compaction_incremental)
24+
| binary(deferred_free_reclaim)
25+
| binary(reader_stall_policy)
26+
| (binary(pagedb) & (
27+
test(/crash/) | test(/recover/) | test(/rekey/)
28+
| test(/anchor/) | test(/torn/) | test(/journal/) | test(/replay/)
29+
))
30+
"""
731
test-group = "serial"
832

33+
# ── Heavy real-disk suites throttled to avoid I/O oversubscription ───────────
34+
# io_uring / tokio-fs VFS coverage and the randomized structural-stress reopen
35+
# cycles do real fsync/rename traffic and each run for tens of seconds. They are
36+
# independent (own temp dirs), so they need not be single-file, but letting the
37+
# whole fleet hit the disk at once inflates latency and can trip timing-based
38+
# assertions. A small cap keeps them overlapping without saturating the device.
39+
[[profile.default.overrides]]
40+
filter = """
41+
binary(vfs_iouring)
42+
| binary(vfs_tokio)
43+
| binary(structural_repro)
44+
"""
45+
test-group = "disk-heavy"
46+
947
[test-groups]
1048
serial = { max-threads = 1 }
49+
disk-heavy = { max-threads = 2 }

0 commit comments

Comments
 (0)