From 7d37ef620150661d90cd897f9affd30a05402396 Mon Sep 17 00:00:00 2001 From: nivy Date: Mon, 13 Jul 2026 22:31:39 -0700 Subject: [PATCH 1/3] Allow setCompressedReadAheadBufferSizeInKb(0) to disable RAB --- .../cassandra/config/DatabaseDescriptor.java | 4 ++-- .../config/DatabaseDescriptorTest.java | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 5bc6de7ac1e..d10082f7ca5 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -3072,8 +3072,8 @@ public static int getCompressedReadAheadBufferSizeInKB() public static void setCompressedReadAheadBufferSizeInKb(int sizeInKb) { - if (sizeInKb < 256) - throw new IllegalArgumentException("compressed_read_ahead_buffer_size_in_kb must be at least 256KiB"); + if (sizeInKb != 0 && sizeInKb < 256) + throw new IllegalArgumentException("compressed_read_ahead_buffer_size_in_kb must be at least 256KiB (set to 0 to disable)"); conf.compressed_read_ahead_buffer_size = createIntKibibyteBoundAndEnsureItIsValidForByteConversion(sizeInKb, "compressed_read_ahead_buffer_size"); } diff --git a/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java b/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java index 6f80a3dc6c3..c3bdd00e21a 100644 --- a/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java +++ b/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java @@ -1212,4 +1212,28 @@ public void testGetDirectIOWritePaths() throws IOException conf.local_system_data_file_directory = savedLocalSystemDir; } } + + @Test + public void testSetCompressedReadAheadBufferSizeInKb() + { + int original = DatabaseDescriptor.getCompressedReadAheadBufferSizeInKB(); + try + { + // 0 should be a legal value, and represents disabling read-ahead buffer + DatabaseDescriptor.setCompressedReadAheadBufferSizeInKb(0); + assertEquals(0, DatabaseDescriptor.getCompressedReadAheadBufferSizeInKB()); + assertEquals(0, DatabaseDescriptor.getCompressedReadAheadBufferSize()); + + Assertions.assertThatThrownBy(() -> DatabaseDescriptor.setCompressedReadAheadBufferSizeInKb(255)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("compressed_read_ahead_buffer_size_in_kb must be at least 256KiB (set to 0 to disable)"); + + DatabaseDescriptor.setCompressedReadAheadBufferSizeInKb(256); + assertEquals(256, DatabaseDescriptor.getCompressedReadAheadBufferSizeInKB()); + } + finally + { + DatabaseDescriptor.setCompressedReadAheadBufferSizeInKb(original); + } + } } From ee545bca8fb55d2f90efd284b8a59ac6303283fe Mon Sep 17 00:00:00 2001 From: nivy Date: Tue, 14 Jul 2026 11:01:18 -0700 Subject: [PATCH 2/3] Disallow negative buffer sizes --- src/java/org/apache/cassandra/config/DatabaseDescriptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index d10082f7ca5..f327826310e 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -3072,7 +3072,7 @@ public static int getCompressedReadAheadBufferSizeInKB() public static void setCompressedReadAheadBufferSizeInKb(int sizeInKb) { - if (sizeInKb != 0 && sizeInKb < 256) + if (sizeInKb < 0 || (sizeInKb > 0 && sizeInKb < 256)) throw new IllegalArgumentException("compressed_read_ahead_buffer_size_in_kb must be at least 256KiB (set to 0 to disable)"); conf.compressed_read_ahead_buffer_size = createIntKibibyteBoundAndEnsureItIsValidForByteConversion(sizeInKb, "compressed_read_ahead_buffer_size"); From 6ead15a2977225131947db4cb0e390175fb8652b Mon Sep 17 00:00:00 2001 From: nivy Date: Mon, 3 Aug 2026 15:43:02 -0700 Subject: [PATCH 3/3] Add CHANGES.txt entry # Conflicts: # CHANGES.txt --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index d7a8cfcb875..02eae06b9aa 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -69,6 +69,7 @@ Merged from 6.0: * Introduce minimum_threshold for data resurrection startup check (CASSANDRA-21293) * Synchronously publish changes to local gossip state following metadata updates (CASSANDRA-21239) Merged from 5.0: + * Allow setCompressedReadAheadBufferSizeInKb(0) to disable read-ahead buffer (CASSANDRA-21522) * Fix ThreadLocalReadAheadBuffer#fill() to throw a CorruptBlockException if chunk metadata and file size are out of sync (CASSANDRA-21519) * Support Python 3.12 and 3.13 in cqlsh (CASSANDRA-20997) * Make synchronization on VectorMemoryIndex inserts more granular (CASSANDRA-21160)