Skip to content

Update seq when merging deltas from partial log merge.#289

Open
aversecat wants to merge 2 commits intomainfrom
auke/merge_read_item_stale_seq
Open

Update seq when merging deltas from partial log merge.#289
aversecat wants to merge 2 commits intomainfrom
auke/merge_read_item_stale_seq

Conversation

@aversecat
Copy link
Contributor

Two different clients can write delta's for totl indexes at the same time, recording their changes. When merged, a reader should apply both in order, and only once. To do so, the seq determines whether the delta has been applied already.

The code fails to update the seq while walking the trees for deltas to apply. Subsequently, when processing subsequent trees, it could re-process deltas already applied. In case of a large negative delta (e.g. removal of large amounts of files), the totl value could become negative, resulting in quota lockout.

The fix is simple: advance the seq when reading partial delta merges to avoid double counting.

merge_read_item() fails to update found->seq when combining delta items
from multiple finalized log trees. Add a test case to replicate the
conditions of this issue.

The conditions to get this to reproduce are pretty tricky. We have to
exceed the block limit and that's nearly impossible at VM scale with out
significant load. Or we can force a partial merge with a trigger, which
is what this changeset does.

Signed-off-by: Auke Kok <auke.kok@versity.com>
Two different clients can write delta's for totl indexes at the same
time, recording their changes. When merged, a reader should apply both
in order, and only once. To do so, the seq determines whether the delta
has been applied already.

The code fails to update the seq while walking the trees for deltas to
apply. Subsequently, when processing subsequent trees, it could
re-process deltas already applied. In case of a large negative delta
(e.g. removal of large amounts of files), the totl value could become
negative, resulting in quota lockout.

The fix is simple: advance the seq when reading partial delta merges
to avoid double counting.

Signed-off-by: Auke Kok <auke.kok@versity.com>
@aversecat aversecat force-pushed the auke/merge_read_item_stale_seq branch from 7c231fa to e4e718e Compare March 3, 2026 19:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant