Skip to content

Parallel-exec: residual functional failures skipped to land the exec-mode CI matrix #21136

Description

@mh0lt

Tracking issue for parallel-exec test failures that were SkipLoad/t.Skip-gated (under EXEC3_PARALLEL=true only) so the serial-vs-parallel CI matrix (#21017 / mh/ci-exec-mode-matrix) can land green. Serial coverage of these is unaffected.

Skipped under parallel exec

  • TestExecutionSpecBlockchain/cancun/eip6780_selfdestruct/test_double_kill.json — wrong trie root at block 2. Block 1 deploys a self-destructing contract; block 2 tx0 CALLs it (SD), tx1 0-value-CALLs it. Serial re-creates it as an empty account ({0,0,empty,0}); under parallel the validated tx1's empty-account re-creation never reaches the apply/commitment path (writeset-reconstruction layer drops it). Same family as execution/stagedsync, db/state: parallel-commitment correctness for reorg/unwind + SD recreate #21088 / state, stagedsync: parallel-exec wrong-root fix for SD vs EIP-161 emptyRemoval #21032.
  • TestExecutionSpecBlockchain/cancun/eip6780_selfdestruct/test_dynamic_create2_selfdestruct_collision_two_different_transactions.json — wrong trie root at block 2; CREATE2 colliding with an address self-destructed in a prior tx. Same family.
  • TestExecutionSpecBlockchain/prague/eip7002_el_triggerable_withdrawals/test_system_contract_deployment.json and .../eip7251_consolidations/test_system_contract_deployment.json — only the fork_CancunToPragueAtTime15k-...-deploy_on_fork_block-{zero,nonzero}_balance variants; system-contract deployment on the fork-transition block diverges under parallel.
  • TestLegacyBlockchain/ValidBlocks/bcEIP3675/tipInsideBlock.json (Cancun + Prague) — parallel over-counts block gasUsed by ~4800; coinbase-touching txs (COINBASE/BALANCE/NUMBER/SSTORE).
  • TestEIP7708BurnLogWhenCoinbaseSelfDestructs (execution/execmodule) — parallel finalize uses a minIBS that only carries coinbase/burnt via SetBalance, so it doesn't know the coinbase was self-destructed → no EIP-7708 Burn log. Needs an ExecutionResult.SelfDestructedAddresses field (regardless of balance) + LogSelfDestructedAccounts looking up the current balance for those.

Flaky under heavy parallel test load (not gated; pass on -count=3)

TestLongerForkHeaders, TestLongerForkBlocks, TestReorgShortBlocks (execution/tests), TestCustomTraceReceiptDomain (execution/stagedsync), TestSetHead (rpc/jsonrpc). The parallel reorg path has timing sensitivity — needs a hardening pass.

Architectural follow-up

These are all the same family — the post-execution wrapper re-derives "what did this tx do" (per-tx writeset via versionWrittenVersionedWrites filter→normalizeWriteSetapplyVersionedWrites; commitment-calc state via calcState.ApplyWrites; BAL recording) and diverges from what serial computes by observing the IBS directly. ~half of genuine parallel-executor PRs over the last 2 months are this family. Direction: extract the serial flow (MakeWriteSet etc.) to run post-validation as the single path (IBS becomes a pure per-tx transaction-state). Incremental first step: route the per-tx delta through versionedWriteCollector for all txs (today only the block-finalize IBS uses it), then have the commitment calc consume the same — collapsing normalizeWriteSet + calcState.ApplyWrites into pass-throughs and removing the SD/empty/recreate heuristics.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions