ZOOKEEPER-4643: Committed txns may be improperly truncated if follower crashes right after updating currentEpoch but before persisting txns to disk #2028
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.
See ZOOKEEPER-4643 for details on the symptom, example trace, diagnostic, and possible fix idea.
To avoid the issues of ZOOKEEPER-4643, one possible fix is to guarantee that a follower updates its currentEpoch file only after it has synced the leader's history (persisted the pending transactions to disk) when receiving NEWLEADER in the SYNC phase.
The solution in this patch is built upon the FIX of ZOOKEEPER-4646 & ZOOKEEPER-4685, which guarantees that a follower syncs the leader's history (logs the pending transactions to disk) before replying ACK of NEWLEADER.
Overall, when a follower receives the NEWLEADER message, it will persist the pending transactions to disk first, then update the currentEpoch file, and finally reply with an ACK of NEWLEADER. This specific order ensures that issues such as ZOOKEEPER-4643, ZOOKEEPER-4646 & ZOOKEEPER-4685 are avoided.