Skip to content

fix: race condition in fast tx collection#21496

Merged
deffrian merged 14 commits intomerge-train/spartanfrom
nikita/race-condition
Mar 18, 2026
Merged

fix: race condition in fast tx collection#21496
deffrian merged 14 commits intomerge-train/spartanfrom
nikita/race-condition

Conversation

@deffrian
Copy link
Collaborator

Ref: A-513

  • Replaces MissingTxsTracker with RequestTracker that unifies missing tx tracking, deadline management, and cancellation signaling into a single object
  • Ensures cancellation propagates from the deepest stack level upward: inner workers and node loops settle before collectFast returns (no orphaned promises)
  • Makes node loop inter-retry sleep interruptible by racing against cancellationToken

@PhilWindle PhilWindle requested a review from mralj March 16, 2026 09:23
@mralj
Copy link
Contributor

mralj commented Mar 16, 2026

@mrzeszutko can you please take this one?

@mralj mralj requested a review from mrzeszutko March 16, 2026 09:35
return Math.max(0, this.deadline.getTime() - now);
}

get cancelled(): boolean {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: getter with side-effects, consider renaming

@deffrian deffrian merged commit 4a893dc into merge-train/spartan Mar 18, 2026
11 checks passed
@deffrian deffrian deleted the nikita/race-condition branch March 18, 2026 12:44
AztecBot added a commit that referenced this pull request Mar 18, 2026
…ad of removed MissingTxsTracker

PR #21496 replaced MissingTxsTracker with RequestTracker and removed the
deadline constructor arg, but 3 test cases in the smart/dumb peer
promotion section still used the old API.
Maddiaa0 pushed a commit that referenced this pull request Mar 18, 2026
## Summary
- Three tests in the "Smart peer demotion" describe block used the
removed `MissingTxsTracker` class and an old `BatchTxRequester`
constructor signature that included `deadline` as a separate argument.
- Updated them to use `RequestTracker.create()` (which wraps the
deadline into a `Date`) and the current constructor signature, matching
all other tests in the file.

## Context
PR #21496 refactored `BatchTxRequester` to take an `IRequestTracker`
(which owns the deadline) instead of a separate deadline parameter, and
removed `MissingTxsTracker`. Three tests in the "Smart peer demotion"
section were not updated, causing `tsgo` type-check failures on
`merge-train/spartan`.

ClaudeBox log: https://claudebox.work/s/5d20c8f4f47c8f3a?run=1
github-merge-queue bot pushed a commit that referenced this pull request Mar 18, 2026
BEGIN_COMMIT_OVERRIDE
fix(p2p): fall back to maxTxsPerCheckpoint for per-block tx validation
(#21605)
chore: fixing M3 devcontainer builds (#21611)
fix: clamp finalized block to oldest available in world-state (#21643)
chore: fix proving logs script (#21335)
fix: (A-649) tx collector bench test (#21619)
fix(validator): process block proposals from own validator keys in HA
setups (#21603)
fix: add bounds when allocating arrays in deserialization (#21622)
fix: skip handleChainFinalized when block is behind oldest available
(#21656)
chore: demote finalized block skip log to trace (#21661)
fix: skip -march auto-detection for cross-compilation presets (#21356)
chore: revert "add bounds when allocating arrays in deserialization"
(#21622) (#21666)
fix: capture txs not available error reason in proposal handler (#21670)
fix: estimate gas in bot and make BatchCall.simulate() return
SimulationResult (#21676)
fix: prevent HA peer proposals from blocking equivocation in duplicate
proposal test (#21673)
fix(p2p): penalize peers for errors during response reading (#21680)
feat(sequencer): add build-ahead config and metrics (#20779)
chore: fixing build on mac (#21685)
fix: HA deadlock for last block edge case (#21690)
fix: process all contract classes in storeBroadcastedIndividualFunctions
(A-683) (#21686)
chore: add slack success post on nightly scenario (#21701)
fix(builder): persist contractsDB across blocks within a checkpoint
(#21520)
fix: only delete logs from rolled-back blocks, not entire tag (A-686)
(#21687)
chore(p2p): lower attestation pool per-slot caps to 2 (#21709)
chore(p2p): remove unused method (#21678)
fix(p2p): penalize peer on tx rejected by pool (#21677)
fix(test): workaround slow mock creation (#21708)
fix(sequencer): fix checkpoint budget redistribution for multi-block
slots (#21692)
fix: batch checkpoint unwinding in handleEpochPrune (A-690) (#21668)
fix(sequencer): add missing opts arg to checkpoint_builder tests
(#21733)
fix: race condition in fast tx collection (#21496)
fix: increase default postgres disk size from 1Gi to 10Gi (#21741)
fix: update batch_tx_requester tests to use RequestTracker (#21734)
chore: replace dead BOOTSTRAP_TO env var with bootstrap.sh build arg
(#21744)
fix(sequencer): extract gas and blob configs from valid requests only
(A-677) (#21747)
fix: deflake attempt for l1_tx_utils (#21743)
fix(test): fix flaky keystore reload test (#21749)
fix(test): fix flaky duplicate_attestation_slash test (#21753)
feat(pipeline): introduce pipeline views for building (#21026)
END_COMMIT_OVERRIDE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants