This repository was archived by the owner on Mar 4, 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.
Closes #338. After thinking about it for a while, I've convinced myself that appendLeaderCb can just skip truncating the log if the appended entries (for which the disk write was cancelled) are not present, because this can occur in a totally benign way. For example, we could start an append request for an entry at index 16 and then start another for index 17 before the first request is finished. Then we could cancel those two requests in the same order they were submitted, and the appendLeaderCb for the second request won't see any entry at index 17 to be truncated. And in fact this seems to be just what happened to cause that Jepsen failure.
(It would be elegant to cancel queued requests in LIFO order, so that each callback sees the log in the same state it was just after it appended its own entries. That would obviate the need for the logLastIndex check here. But I'm a little nervous about unanticipated consequences from changing that ordering.)
Signed-off-by: Cole Miller cole.miller@canonical.com