test(integration): TestNightlyGigaMixedRelease — one exclusive conformance run#492
Conversation
…mance run The suite ran two release-test conformance Jobs concurrently against one shared chain (one per follower). The release-test suite assumes a single exclusive tenant, so the co-tenant runs cross-talked on GLOBAL block state (the EIP-1559 base fee is per-block, driven by every tx in the block) and on tx-inclusion timing — producing nondeterministic failures (base-fee off-by-one, null failed-tx receipts) that were test artifacts, not a chain or giga-store regression. Redesign to the suite's true invariant: a mixed giga/v2 follower set is invisible to consensus. Provision one chain + two followers, migrate one to giga, run the conformance harness ONCE against the v2 (full-history, shipped-default) follower with exclusive chain access, and assert that through the load the chain kept advancing and BOTH followers stayed at the validator head. Per-node SS read+serve parity is already covered by TestNightlyGigaStoreMigration. - Assert head-parity (LatestHeight vs validator head, within one snapshot interval), not catching_up — a one-way latch that already flipped pre-load and would false-green a post-load halt or a giga follower falling behind. - Extract a shared runReleaseTest helper (TestNightlyRelease now uses it too; behavior unchanged); delete the concurrency-only waitJobErr. - Root test reads as five named sequential steps. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR SummaryLow Risk Overview The suite now runs one conformance Job against the v2 control follower, then checks the real invariant: validator head advanced under load and both giga and v2 followers stay within snapshot-interval lag of that head (not
Reviewed by Cursor Bugbot for commit 45e33dd. Bugbot is set up for automated code reviews on this repo. Configure here. |
Problem
The nightly
TestNightlyGigaMixedReleasesuite failed (nightly-harness-suite-manual-validate). Root cause: the test launched tworelease-testconformance Jobs concurrently against one shared chain (one per RPC follower). The release-test suite is written for a single exclusive tenant — its stateful sequences (EVM filters, send-then-wait) assume one consistent mempool + filter-store view — so the two runs cross-talked on global block state and inclusion timing:Separate admin accounts isolate per-account state but cannot isolate global block state, so the failures were nondeterministic test artifacts, not a chain or giga-store regression. A scoped reproduction confirmed this: re-running the original design failed with a completely different set of cases, and the same conformance image passes single-run in
TestNightlyRelease.Fix
Redesign to the suite's true invariant — a mixed giga/v2 follower set is invisible to consensus — which needs only one traffic source:
Per-node SS read+serve parity is already covered by
TestNightlyGigaStoreMigration; this suite's distinct job is the mixed-fleet-under-load consensus invariant.Notable
catching_up. The invariant is asserted by comparing each follower'sLatestHeightto the validator head (within one snapshotinterval), plus a head-advancement check.catching_upis a one-way latch that already flips pre-load, so it would false-green a post-load halt or a giga follower silently falling behind — the one failure mode this suite exists to catch.runReleaseTesthelper extracted (dedups the Job-launch orchestration;TestNightlyReleasenow uses it, behavior unchanged); concurrency-onlywaitJobErrdeleted.Testing
gofmtclean;go vet -tags integration ./...andgo build -tags integration ./...clean.🤖 Generated with Claude Code