Skip to content

Propagate trickle_fsync settings to compressed SSTable writers#4927

Open
samueldlightfoot wants to merge 1 commit into
apache:cassandra-5.0from
samueldlightfoot:cassandra-5.0-fix-21487
Open

Propagate trickle_fsync settings to compressed SSTable writers#4927
samueldlightfoot wants to merge 1 commit into
apache:cassandra-5.0from
samueldlightfoot:cassandra-5.0-fix-21487

Conversation

@samueldlightfoot

Copy link
Copy Markdown
Contributor

CompressedSequentialWriter rebuilt its SequentialWriterOption but copied only bufferSize/bufferType/finishOnClose, dropping trickleFsync and trickleFsyncByteInterval. Compression is the default, so trickle_fsync had no effect on SSTable data files: SequentialWriter.doFlush never reached the interval sync. Carry the two fields through the rebuild.

Add tests asserting the full option-rebuild contract (caller knobs pass through, buffer sizing follows the compression layout) and that the interval sync actually fires while writing compressed data.

https://issues.apache.org/jira/browse/CASSANDRA-21487

patch by Sam Lightfoot; reviewed by for CASSANDRA-21487

CompressedSequentialWriter rebuilt its SequentialWriterOption but copied only
bufferSize/bufferType/finishOnClose, dropping trickleFsync and
trickleFsyncByteInterval. Compression is the default, so trickle_fsync had no
effect on SSTable data files: SequentialWriter.doFlush never reached the
interval sync. Carry the two fields through the rebuild.

Add tests asserting the full option-rebuild contract (caller knobs pass
through, buffer sizing follows the compression layout) and that the interval
sync actually fires while writing compressed data.
}

@Test
public void testTrickleFsyncFiresWhileWritingCompressedData() throws IOException

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: should we split the test to 2? (also to not share collector: it is not an issue now but if it is changed the test may start to fail)

try (CountingCSW writer = new CountingCSW(off, offOffsets, null, disabled,
CompressionParams.lz4(chunk), collector))
{
writer.write(new byte[chunk * 20]);

@netudima netudima Jul 13, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: a comment would be nice to clarify that trickleFsyncByteInterval is applied before compression.. (it is probably even worth to mention in configuration file, it can be confusing)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How hard would be to adjust the logic and apply trickleFsyncByteInterval for lower disk writing level, after compression?

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.

2 participants