From 3bd0884efbd8f17d7c06bd701266e18a73daa17f Mon Sep 17 00:00:00 2001 From: nivy Date: Wed, 29 Jul 2026 20:02:15 -0700 Subject: [PATCH 1/2] 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 bbf46f54757..306371acfde 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -2553,8 +2553,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 > 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 5ae7222a081..537f7c18e93 100644 --- a/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java +++ b/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java @@ -944,4 +944,28 @@ else if (mode == Config.DiskAccessMode.auto) assertThat(DatabaseDescriptor.getCommitLogWriteDiskAccessMode()).isEqualTo(mode); } } + + @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 40adf2009df96c0c615298f5e6cfb3e573aabbb3 Mon Sep 17 00:00:00 2001 From: nivy Date: Mon, 3 Aug 2026 14:58:28 -0700 Subject: [PATCH 2/2] Add CHANGES.txt entry --- CHANGES.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.txt b/CHANGES.txt index 310e651373d..78e9ef71fb8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 5.0.9 + * Allow setCompressedReadAheadBufferSizeInKb(0) to disable read-ahead buffer (CASSANDRA-21522) * Coordinator load-shedding returns OverloadedException without setting streamId, misrouting query responses (CASSANDRA-21508) * SAI Component Checksum Validation Should be Segment-Aware (CASSANDRA-21516) * Support Python 3.12 and 3.13 in cqlsh (CASSANDRA-20997)