Conversation
After a leader restart a rejoining backup asked its repair peer for ops 9..=8, a range header validation rejects. The floor installed by a RangeEvicted reply is verified on every RepairDone, but the commit walk can pass it before the reply lands, evicting the headers of the ops it committed. Such a floor never connects and its window never looks complete, so the refusal stays InProgress while the walk runs commit_min to the fetch ceiling, and the reply handler then requests commit_min + 1 ..= fetch_to_op. Skip the floor check when the raw floor is at or below commit_min: it cannot move the commit point and everything below it is applied. The clamp to commit_max stays inside the check so a peer retaining nothing this replica needs still escapes to state transfer. The reply handler also stops pulling a chunk once the walk stands at the ceiling, the guard the stall retry already had. Making the refusal definitive instead would arm a state transfer on a replica that holds every committed op. Fixes #4230
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4246 +/- ##
=============================================
- Coverage 87.50% 69.31% -18.19%
Complexity 1575 1575
=============================================
Files 1280 1281 +1
Lines 223241 190549 -32692
Branches 186604 153913 -32691
=============================================
- Hits 195337 132088 -63249
- Misses 23195 53856 +30661
+ Partials 4709 4605 -104
🚀 New features to boost your workflow:
|
2 tasks
numinnex
approved these changes
Sep 21, 2026
spetz
approved these changes
Sep 21, 2026
krishvishal
approved these changes
Sep 21, 2026
Contributor
Author
|
lets wait with merge until author of issue #4230 confirms that PR resolves this issue. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
After a leader restart a rejoining backup asked its repair peer for
ops 9..=8, a range header validation rejects. The floor installed by
a RangeEvicted reply is verified on every RepairDone, but the commit
walk can pass it before the reply lands, evicting the headers of the
ops it committed. Such a floor never connects and its window never
looks complete, so the refusal stays InProgress while the walk runs
commit_min to the fetch ceiling, and the reply handler then requests
commit_min + 1 ..= fetch_to_op.
Skip the floor check when the raw floor is at or below commit_min:
it cannot move the commit point and everything below it is applied.
The clamp to commit_max stays inside the check so a peer retaining
nothing this replica needs still escapes to state transfer. The
reply handler also stops pulling a chunk once the walk stands at the
ceiling, the guard the stall retry already had. Making the refusal
definitive instead would arm a state transfer on a replica that
holds every committed op.
Fixes #4230