Skip to content

fix: batch checkpoint unwinding in handleEpochPrune (A-690)#21668

Merged
PhilWindle merged 2 commits intomerge-train/spartanfrom
phil/a-690-handleepochprune-unbounded-loop-rewinding-checkpoints
Mar 18, 2026
Merged

fix: batch checkpoint unwinding in handleEpochPrune (A-690)#21668
PhilWindle merged 2 commits intomerge-train/spartanfrom
phil/a-690-handleepochprune-unbounded-loop-rewinding-checkpoints

Conversation

@PhilWindle
Copy link
Collaborator

Summary

  • Replace the unbounded Promise.all in handleEpochPrune with a sequential for-loop
  • Prevents memory pressure when the gap between local pending and proven checkpoint numbers is large

Fixes https://linear.app/aztec-labs/issue/A-690

🤖 Generated with Claude Code

@PhilWindle PhilWindle force-pushed the phil/a-690-handleepochprune-unbounded-loop-rewinding-checkpoints branch from dd45f25 to bf1ad57 Compare March 17, 2026 12:28
Replace the unbounded Promise.all in handleEpochPrune with batched
retrieval (batch size 10), preventing memory pressure when proving
significantly lags behind the local pending checkpoint.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@PhilWindle PhilWindle force-pushed the phil/a-690-handleepochprune-unbounded-loop-rewinding-checkpoints branch from bf1ad57 to c3e214e Compare March 17, 2026 15:38
@PhilWindle PhilWindle marked this pull request as ready for review March 17, 2026 15:42
Copy link
Contributor

@spalladino spalladino left a comment

Choose a reason for hiding this comment

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

And asyncPool is your friend as well

const BATCH_SIZE = 10;
const newBlocks = [];
for (let offset = 0; offset < checkpointsToUnwind; offset += BATCH_SIZE) {
const batchSize = Math.min(BATCH_SIZE, checkpointsToUnwind - offset);
Copy link
Contributor

Choose a reason for hiding this comment

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

chunk is your friend here

@PhilWindle PhilWindle enabled auto-merge March 18, 2026 12:11
@PhilWindle PhilWindle merged commit 6e0b2f7 into merge-train/spartan Mar 18, 2026
11 checks passed
@PhilWindle PhilWindle deleted the phil/a-690-handleepochprune-unbounded-loop-rewinding-checkpoints branch March 18, 2026 12:29
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.

2 participants