Summary
QA - RPC Integration Tests Latest intermittently fails before any RPC test runs, at the "Run Erigon and wait for sync" gate, with:
Error: nodes not synced, testingNode=<X> referenceNode=<Y>
It's a non-deterministic tip-convergence race, not a code regression — on the same commit the parallel job frequently passes while the serial job fails.
Symptom / evidence
The test builds a local Erigon, starts it from a freshly-mirrored datadir, and waits for it to reach the same latest block as the remote reference node (REFERENCE_SYSTEM_HOST_ADDRESS, always at tip) before comparing RPC responses. The freshly-started local node lags 2–3 blocks behind the moving tip and the gate gives up after ~3 retries.
Example — run 28143986802 (release/3.5, commit 420c5ef6), serial job:
03:22:12 testing node starts from mirrored datadir
03:22:22 … 03:23:34 currentBlock=highestBlock=25391905 ← ~80s not advancing
(cold cache + Caplin checkpoint-sync / forkchoice handshake)
03:23:46 "node in sync! height = 25391925" ← catches up in a burst
03:24:19 nodes not synced testingNode=25391927 referenceNode=25391929
03:24:28 nodes not synced testingNode=25391927 referenceNode=25391930
03:24:37 nodes not synced testingNode=25391927 referenceNode=25391930 → FAIL
The parallel job of the same commit (warm datadir, already near tip) converged (node in sync! height = 25391959) and ran 194 tests.
Why it's a flake, not a regression
- Same commit:
serial fails, parallel passes.
- Recurs on
main (failed 2026-06-20 677d3aca, 06-21 9e2e4d09; passed 06-22…06-25) and across unrelated commits on release/3.5 (e.g. it also failed on the commit before 420c5ef6 with the identical signature).
- The gate fails before RPC comparison; the node is healthy, just a few blocks behind a moving tip.
Root cause (harness)
The convergence gate requires a freshly-restarted node to match the remote reference's current latest block within a short retry window (~3 attempts / ~20s). A cold-started node needs ~80s to resume following the tip (cold page cache + CL handshake), by which point the reference has advanced — so it can't converge on the first (cold) attempt.
Suggested fixes (any one)
- Widen / make adaptive the convergence retry window or timeout.
- Warm the node up to the tip before arming the sync gate.
- Compare both nodes at a fixed agreed block height instead of "current latest".
Open secondary question
Is ~80s to resume following the tip after a restart expected, or itself worth a look?
Summary
QA - RPC Integration Tests Latestintermittently fails before any RPC test runs, at the "Run Erigon and wait for sync" gate, with:It's a non-deterministic tip-convergence race, not a code regression — on the same commit the
paralleljob frequently passes while theserialjob fails.Symptom / evidence
The test builds a local Erigon, starts it from a freshly-mirrored datadir, and waits for it to reach the same latest block as the remote reference node (
REFERENCE_SYSTEM_HOST_ADDRESS, always at tip) before comparing RPC responses. The freshly-started local node lags 2–3 blocks behind the moving tip and the gate gives up after ~3 retries.Example — run 28143986802 (
release/3.5, commit420c5ef6), serial job:The parallel job of the same commit (warm datadir, already near tip) converged (
node in sync! height = 25391959) and ran 194 tests.Why it's a flake, not a regression
serialfails,parallelpasses.main(failed 2026-06-20677d3aca, 06-219e2e4d09; passed 06-22…06-25) and across unrelated commits onrelease/3.5(e.g. it also failed on the commit before420c5ef6with the identical signature).Root cause (harness)
The convergence gate requires a freshly-restarted node to match the remote reference's current latest block within a short retry window (~3 attempts / ~20s). A cold-started node needs ~80s to resume following the tip (cold page cache + CL handshake), by which point the reference has advanced — so it can't converge on the first (cold) attempt.
Suggested fixes (any one)
Open secondary question
Is ~80s to resume following the tip after a restart expected, or itself worth a look?