use sizeDiff=1 to represent holes filled #71
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.
Context: ssbc/jitdb#199
Problem
In my ssb-db2 PR ssbc/ssb-db2#339, I had a
if (sizeDiff > 0) resetIndexes()
but this misses a corner case.sizeDiff
is only greater than zero if truncation removed at least one block. ButsizeDiff === 0
can mean two very different things:We need to rebuild indexes in the 2nd case, but not in the 1st. So we need a way of knowing the difference between these cases.
Solution
Use
sizeDiff === 1
as a special case where no blocks have been truncated (the log size remained the same) but some holes have been filled, thus requiring ssb-db2 to rebuild indexes.I think it's safe to say that sizeDiff is 1 byte because the minimum size of a block is 3 bytes because just the "End Of Block" marker takes 2 bytes.