Repository navigation
shared-tree checkpoint: one pass covers every live peer and converges - #1689
Merged
Merged
Conversation
The checkpoint fired once per live peer, but remembered at most 16 acknowledgments and never forgot a peer that had exited. With peers respawning, the set filled up; every new peer could then never be acknowledged, so every mutating call was refused for good and each re-issue named another peer. One checkpoint now acknowledges every peer live at that moment, and acknowledgments of peers that are gone are dropped, so an identical re-issue proceeds. Only a peer that starts later fires another checkpoint. The message names the first peer and how many others it covers. Fixes #1622
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.
Fixes #1622.
Root cause
presence.gateCheckIdentityacknowledged one peer per checkpoint, kept at most 16 acknowledgments, and never dropped a peer that had exited. With peers respawning, the set filled up. Every new peer after that could never be acknowledged, so every mutating call was refused for good, and each re-issue named a different peer.Fix
presence_ack.ackLive. One checkpoint acknowledges every peer that is live at that moment, and drops acknowledgments of peers that are gone.NOT performedmarker the batch gate matches is unchanged.Not changed
Commands whose only effect is remote (over ssh) or outside the worktree are still checkpointed while peers are live. They now pass after one re-issue instead of never.
Tests