Skip to content

[MOD-18471] Fix SVS marked-deletion GC race - #1081

Closed
nonirosenfeldredis wants to merge 1 commit into
mainfrom
sharon-MOD-18471
Closed

nonirosenfeldredis wants to merge 1 commit into
mainfrom
sharon-MOD-18471

Conversation

@nonirosenfeldredis

@nonirosenfeldredis nonirosenfeldredis commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • preserve SVS deletions that race with GC after compact returns
  • subtract only the deletion count observed before compaction instead of resetting the full counter
  • add a deterministic tiered-index regression test for the post-compact deletion window

Testing

  • regression test with the original store(0): fails with num_marked_deleted = 0, expected 1
  • regression test with the fix: passes
  • clang-format dry run and git diff --check pass

The before/after test was run in an isolated build using the repository-pinned SVS revision because the working tree's pre-existing SVS submodule checkout differs from the pinned commit.


Note

Medium Risk
Changes concurrent GC accounting for soft deletes on the SVS backend; incorrect logic could delay or skip compaction triggers, though the fix is narrowly scoped and covered by a targeted regression test.

Overview
Fixes a race in SVS garbage collection where runGC() cleared num_marked_deleted to zero after compact(), so a concurrent delete in the post-compact window could be dropped from the counter and GC might not account for that deletion.

runGC() now snapshots the marked-deleted count at GC start and fetch_subs only that amount after compaction instead of a full reset, so newer increments from overlapping deletes are preserved.

Under BUILD_TESTS, adds setAfterCompactCallbackForTest to run code immediately after compact() and a tiered SVS regression test that deletes during that window and checks the counter and a follow-up GC.

Reviewed by Cursor Bugbot for commit 6892476. Bugbot is set up for automated code reviews on this repo. Configure here.

@codecov

codecov Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.53%. Comparing base (a59dd72) to head (6892476).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1081      +/-   ##
==========================================
+ Coverage   97.52%   97.53%   +0.01%     
==========================================
  Files         143      143              
  Lines        9697     9702       +5     
==========================================
+ Hits         9457     9463       +6     
+ Misses        240      239       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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