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:
Setting the desired offset as the inital next offset in the Commits iterator, instead of the nearest segment boundary.
Looping instead of recursing in the Commits iterator while skipping commits, so we can skip until the initial offset without blowing the stack.
Passing the desired offset to Commit::into_transactions, such that Decoder::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
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