fix(stages): only iterate over active stages #20604
Open
+28
−7
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
During engine sync, we iterate over all stages in
StageId::ALLand bump their checkpoints viaupdate_pipeline_stages. During the pipeline consistency check, we iterate all checkpoints and compare them to the header stage.However, the pipeline itself conditionally adds
PruneSenderRecoveryStageonly if sender pruning is enabled:reth/crates/stages/stages/src/sets.rs
Lines 337 to 340 in b79c58d
This can result in the following weird scenario if sender pruning is not enabled:
PruneSenderRecoverycheckpoint is set to block 100 by engine sync (viaupdate_pipeline_stages)PruneSenderRecoveryStageis not in the pipeline, its checkpoint stays at 100 (ahead of other stages, but not an issue yet)PruneSenderRecoveryStageis not in the pipeline and won't run, so its checkpoint stays at 100PruneSenderRecovery(100) <Headers(105), which triggers the inconsistency check:or
reth/crates/node/builder/src/launch/common.rs
Lines 975 to 985 in b79c58d