commitlog: Improve skipping behavior of traversals #1902
Merged
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
*_from
style traversals have historically yielded commits or transactions before the given from-offset, leaving it to downstream consumers to handle skipping.While folding handles it internally, this behavior is not great for transaction iterators, due to the statefulness of decoding -- it is usually necessary to call
Decoder::skip_record
until the desired offset is found.We would also yield all commits from the start of the nearest segment boundary, which can be quite confusing when using the commit iterators directly.
This patch fixes the situation by:
Commits
iterator, instead of the nearest segment boundary.Commits
iterator while skipping commits, so we can skip until the initial offset without blowing the stack.Commit::into_transactions
, such thatDecoder::skip_record
can be called if the offset doesn't lie on the commit boundary.Expected complexity level and risk
2.5 -- makes head spin
NOTE: On top of #1901, because tooling work depends on the whole series