This repository has been archived by the owner on Nov 14, 2024. It is now read-only.
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.
Goals (and why):
#5131 was reverted in #5181 as there were false positives. in #5131, it was (incorrectly) assumed the timestamps are strictly increasing with increasing sequence numbers. There is a possibility where consecutive seq numbers have the same timestamp. This is possible when a node gains leadership and does not know the value for latest sequence number - n . In this case, it forces agreement for nth sequence on the same value as that of (n-1)th or (n-2)th round (if value for n-1 is not known).
See PaxosTimestampBoundStore#getAgreedState for reference.
Implementation Description (bullets):
The invariant is now modified to - timestamps should not decrease with increasing sequence numbers.
Testing (What was existing testing like? What have you done to improve it?):
Added unit tests.
Also, I have validated the invariant on paxos logs from internal dev stack
Concerns (what feedback would you like?):
Corner cases I might have missed?
Where should we start reviewing?:
All of the code is same as in #5131 except the inequality check in LocalTimestampInvariantsVerifier#timestampInvariantsViolationLevel
Priority (whenever / two weeks / yesterday):
EOD tomorrow