Repository navigation
fix: refresh resident datasets before compaction planning - #431
Merged
Merged
Conversation
beinan
marked this pull request as ready for review
October 21, 2026 09:41
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
A resident compactor can hold a base-table version from before another executor's completed rewrite. Its next compaction then rewrites obsolete fragments and fails with
RetryableCommitConflict, even when the two requests run sequentially. This reproduced with two current release-image workers against isolated Azure storage.Refresh the writable dataset before direct or incremental compaction. Prepared compaction reads a fresh clone and records that clone's version/schema; publishing still validates the original prepared source fragments and requires the existing commit authority. Historical checkouts remain read-only. No automatic retry or table lock is added.
Validation: before the fix, both new regressions fail on main: direct compaction reports a stale Rewrite conflict, and prepared compaction captures version 8 instead of current version 12. The tests cover direct/incremental/prepared paths, a later append, exact row/blob preservation, and rejecting pinned historical handles. All 9 compact-related core tests passed, including concurrent WAL merge, incremental compaction, revoked authority, and rejecting deleted source fragments. Final head 8a69d9c passed all 11 CI checks across the Rust, Python and Style workflows, including real-etcd HA tests, coverage and all three platform wheels. Targeted local Clippy also passed. No production configuration or release-image pin changes.