diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index c0fb8bc200..9477c25478 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -3067,8 +3067,8 @@ public class DatabaseDescriptor 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 5796c4032f..041e312a43 100644 --- a/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java +++ b/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java @@ -1190,4 +1190,28 @@ public class DatabaseDescriptorTest 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); + } + } }