jacek-lewandowski commented on code in PR #2894:
URL: https://github.com/apache/cassandra/pull/2894#discussion_r1404015032


##########
test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java:
##########
@@ -805,4 +810,107 @@ public void testInvalidSub1DefaultRFs() throws 
IllegalArgumentException
     {
         DatabaseDescriptor.setDefaultKeyspaceRF(0);
     }
+
+    @Test
+    public void testCommitLogDiskAccessMode() throws IOException
+    {
+        ParameterizedClass savedCompression = 
DatabaseDescriptor.getCommitLogCompression();
+        EncryptionContext savedEncryptionContexg = 
DatabaseDescriptor.getEncryptionContext();
+        Config.DiskAccessMode savedCommitLogDOS = 
DatabaseDescriptor.getCommitLogWriteDiskAccessMode();
+        String savedCommitLogLocation = 
DatabaseDescriptor.getCommitLogLocation();
+
+        try
+        {
+            // block size available
+            
DatabaseDescriptor.setCommitLogLocation(Files.createTempDirectory("testCommitLogDiskAccessMode").toString());
+
+            // no encryption or compression
+            DatabaseDescriptor.setCommitLogCompression(null);
+            DatabaseDescriptor.setEncryptionContext(null);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.spinning;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.mmap, Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.direct);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.ssd;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.direct, Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.direct);
+
+            // compression enabled
+            DatabaseDescriptor.setCommitLogCompression(new 
ParameterizedClass("LZ4Compressor", null));
+            DatabaseDescriptor.setEncryptionContext(null);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.spinning;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.ssd;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+
+            // encryption enabled
+            DatabaseDescriptor.setCommitLogCompression(null);
+            DatabaseDescriptor.setEncryptionContext(new 
EncryptionContext(EncryptionContextGenerator.createEncryptionOptions()));
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.spinning;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.ssd;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+
+            // block size not available
+            DatabaseDescriptor.setCommitLogLocation(null);
+
+            // no encryption or compression
+            DatabaseDescriptor.setCommitLogCompression(null);
+            DatabaseDescriptor.setEncryptionContext(null);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.spinning;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.mmap, Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.direct);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.ssd;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.mmap, Config.DiskAccessMode.mmap, 
Config.DiskAccessMode.direct);
+
+            // compression enabled
+            DatabaseDescriptor.setCommitLogCompression(new 
ParameterizedClass("LZ4Compressor", null));
+            DatabaseDescriptor.setEncryptionContext(null);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.spinning;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.ssd;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+
+            // encryption enabled
+            DatabaseDescriptor.setCommitLogCompression(null);
+            DatabaseDescriptor.setEncryptionContext(new 
EncryptionContext(EncryptionContextGenerator.createEncryptionOptions()));
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.spinning;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+            DatabaseDescriptor.getRawConfig().disk_optimization_strategy = 
Config.DiskOptimizationStrategy.ssd;
+            assertCommitLogDiskAccessModes(Config.DiskAccessMode.standard, 
Config.DiskAccessMode.standard, Config.DiskAccessMode.standard);
+        }
+        finally
+        {
+            DatabaseDescriptor.setCommitLogCompression(savedCompression);
+            DatabaseDescriptor.setEncryptionContext(savedEncryptionContexg);
+            
DatabaseDescriptor.setCommitLogWriteDiskAccessMode(savedCommitLogDOS);
+            DatabaseDescriptor.setCommitLogLocation(savedCommitLogLocation);
+        }
+    }
+
+    private void assertCommitLogDiskAccessModes(Config.DiskAccessMode 
expectedLegacy, Config.DiskAccessMode expectedAuto, Config.DiskAccessMode... 
allowedModesArray)
+    {
+        EnumSet<Config.DiskAccessMode> allowedModes = 
EnumSet.copyOf(Arrays.asList(allowedModesArray));
+        allowedModes.add(Config.DiskAccessMode.legacy);
+        allowedModes.add(Config.DiskAccessMode.auto);
+
+        EnumSet<Config.DiskAccessMode> disallowedModes = 
EnumSet.complementOf(allowedModes);
+
+        for (Config.DiskAccessMode mode : disallowedModes)
+        {
+            DatabaseDescriptor.setCommitLogWriteDiskAccessMode(mode);
+            
assertThatExceptionOfType(ConfigurationException.class).isThrownBy(DatabaseDescriptor::initializeCommitLogDiskAccessMode);
+        }
+
+        for (Config.DiskAccessMode mode : allowedModes)
+        {
+            DatabaseDescriptor.setCommitLogWriteDiskAccessMode(mode);
+            // logger.info("commit log directory {}", 
DatabaseDescriptor.getCommitLogLocation());

Review Comment:
   sorry, leftover



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to