Conversation
Pin incremental-backup readers while creating component links and reject missing required components. Roll back only failed snapshot additions and serialize conflicting destination operations to preserve existing snapshots. Abort offline splitting if its protective snapshot cannot be created. CASSANDRA-16047 Generated-by: Claude (Anthropic)
cheeeee
force-pushed
the
CASSANDRA-16047-trunk
branch
from
September 11, 2026 22:51
bdd5b96 to
c2d98c4
Compare
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.
CASSANDRA-16047 reports NoSuchFileException from createHardLink during incremental backup, which the
disk failure policy turns into an FSWriteError and a node shutdown.
Tracker.addSSTables publishes new readers into the live set before linking them into backups/, and holds
no reference while linking. A compaction that picks the reader up in between can obsolete and delete its
files while createLinks is still iterating the components; the exists() check before each link does not
close that window.
Changes:
A reader whose lifecycle has already ended (tryRef returns null) is skipped as a whole; components are
never skipped individually.
(BIG: FILTER, SUMMARY; BTI: FILTER). Any other missing component throws
UncheckedIOException(NoSuchFileException) rather than silently producing a link set that cannot be
loaded. This is a behaviour change: a snapshot or backup of an SSTable that is missing a required
component now fails with a plain exception (not an FSError, so the disk failure policy is not
involved) instead of succeeding with an incomplete copy.
Testing (SSTableReaderTest, both fail without the change):
the moment createLinks starts; every backed-up component must still match the original byte for byte,
and the deferred deletion must run only after the Tracker releases its reference. Without the change
it fails with NoSuchFileException on a Statistics component.
remaining components are linked; a missing STATS throws.
CASSANDRA-16047