Skip to content

QA: RPC Integration Tests Latest flaky — testing node can't converge to reference tip after restart (nodes not synced) #22036

Description

@yperbasis

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?

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions