Skip to content

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

@mh0lt

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.

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions