Unicast recovery algorithm should account for all versions starting from "max(KCV)" onwards #12417
+1
−1
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.
The unicast recovery algorithm should ensure that all versions starting from "max(KCV)" onwards are included in the "unknownCommittedVersions" list. The current implementation allows the version whose prevVersion is equal to "max(KCV)" to be skipped (
foundationdb/fdbserver/TagPartitionedLogSystem.actor.cpp
Line 2333 in bfe0b4e
NOTE: A good unit test for this function "getRecoverVersionUnicast()" could have found this issue. But it could be tedious to write such a test because it requires the population of data structures like LogSets - we should think more about this.
Testing:
Found by a simulation test (multiple simulation tests found this issue, I think. Didn't look in-depth into all of them). Verified that they all succeed over this change. Also, multiple Joshua jobs run over this change (with version vector enabled) didn't show any similar failures.
Joshua job (with version vector disabled):
Code-Reviewer Section
The general pull request guidelines can be found here.
Please check each of the following things and check all boxes before accepting a PR.
For Release-Branches
If this PR is made against a release-branch, please also check the following:
release-branchormainif this is the youngest branch)