diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 59ffb9f02afa..06777a425bb2 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -4100,6 +4100,26 @@ public static void setDynamicBadnessThreshold(double dynamicBadnessThreshold) conf.dynamic_snitch_badness_threshold = dynamicBadnessThreshold; } + public static boolean isDynamicSnitch() + { + return conf.dynamic_snitch; + } + + public static void setDynamicSnitch(boolean enabled) + { + conf.dynamic_snitch = enabled; + } + + public static void setEndpointSnitch(String endpointSnitch) + { + conf.endpoint_snitch = endpointSnitch; + } + + public static void setNodeProximityClassName(String nodeProximity) + { + conf.node_proximity = nodeProximity; + } + public static EncryptionOptions.ServerEncryptionOptions getInternodeMessagingEncyptionOptions() { return conf.server_encryption_options; diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 424df75b97d3..d1a317bdae33 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -4369,12 +4369,14 @@ public void updateSnitch(String epSnitchClassName, Boolean dynamic, Integer dyna { Supplier factory = () -> new SnitchAdapter(DatabaseDescriptor.createEndpointSnitch(epSnitchClassName)); updateProximityInternal(factory, dynamic, dynamicUpdateInterval, dynamicResetInterval, dynamicBadnessThreshold); + DatabaseDescriptor.setEndpointSnitch(epSnitchClassName); } public void updateNodeProximity(String npsClassName, Boolean dynamic, Integer dynamicUpdateInterval, Integer dynamicResetInterval, Double dynamicBadnessThreshold) throws ClassNotFoundException { Supplier factory = () -> DatabaseDescriptor.createProximityImpl(npsClassName); updateProximityInternal(factory, dynamic, dynamicUpdateInterval, dynamicResetInterval, dynamicBadnessThreshold); + DatabaseDescriptor.setNodeProximityClassName(npsClassName); } private void updateProximityInternal(Supplier implSupplier, Boolean dynamic, Integer dynamicUpdateInterval, Integer dynamicResetInterval, Double dynamicBadnessThreshold) throws ClassNotFoundException @@ -4423,6 +4425,9 @@ private void updateProximityInternal(Supplier implSupplier, Boole // point reference to the new instance DatabaseDescriptor.setNodeProximity(newProximity); + + if (dynamic != null) + DatabaseDescriptor.setDynamicSnitch(dynamic); } else { @@ -5023,6 +5028,10 @@ public void disconnectInvalidRoles() public void disableAuditLog() { AuditLogManager.instance.disableAuditLog(); + AuditLogOptions disabledOptions = new AuditLogOptions.Builder(DatabaseDescriptor.getAuditLoggingOptions()) + .withEnabled(false) + .build(); + DatabaseDescriptor.setAuditLoggingOptions(disabledOptions); logger.info("Auditlog is disabled"); } @@ -5078,6 +5087,7 @@ public void enableAuditLog(String loggerName, Map parameters, St .build(); AuditLogManager.instance.enable(options); + DatabaseDescriptor.setAuditLoggingOptions(options); logger.info("AuditLog is enabled with configuration: {}", options); } @@ -5170,6 +5180,17 @@ public void enableFullQueryLogger(String path, String rollCycle, Boolean blockin checkNotNull(path, "cassandra.yaml did not set log_dir and not set as parameter"); FullQueryLogger.instance.enableWithoutClean(File.getPath(path), rollCycle, blocking, maxQueueWeight, maxLogSize, archiveCommand, maxArchiveRetries); + + FullQueryLoggerOptions updatedOptions = new FullQueryLoggerOptions(); + updatedOptions.log_dir = path; + updatedOptions.roll_cycle = rollCycle; + updatedOptions.block = blocking; + updatedOptions.max_queue_weight = maxQueueWeight; + updatedOptions.max_log_size = maxLogSize; + updatedOptions.archive_command = archiveCommand; + updatedOptions.max_archive_retries = maxArchiveRetries; + updatedOptions.allow_nodetool_archive_command = fqlOptions.allow_nodetool_archive_command; + DatabaseDescriptor.setFullQueryLogOptions(updatedOptions); } @Override diff --git a/test/unit/org/apache/cassandra/fql/FullQueryLoggerTest.java b/test/unit/org/apache/cassandra/fql/FullQueryLoggerTest.java index 5dbfdc41e8f6..5dde50c59162 100644 --- a/test/unit/org/apache/cassandra/fql/FullQueryLoggerTest.java +++ b/test/unit/org/apache/cassandra/fql/FullQueryLoggerTest.java @@ -675,6 +675,24 @@ public void testLogQueryNegativeTime() throws Exception logQuery("", QueryOptions.DEFAULT, queryState(), -1); } + @Test + public void testEnableFullQueryLoggerUpdatesConfig() throws IOException + { + FullQueryLoggerOptions options = new FullQueryLoggerOptions(); + Path tmpDir = Files.createTempDirectory("FullQueryLoggerTest"); + options.log_dir = tmpDir.toString(); + DatabaseDescriptor.setFullQueryLogOptions(options); + + StorageService.instance.enableFullQueryLogger(options.log_dir, "TEST_SECONDLY", true, 5000, 50000, null, 0); + + FullQueryLoggerOptions updated = DatabaseDescriptor.getFullQueryLogOptions(); + assertEquals("TEST_SECONDLY", updated.roll_cycle); + assertTrue(updated.block); + assertEquals(5000, updated.max_queue_weight); + + FullQueryLogger.instance.stop(); + } + @Test public void testJMXArchiveCommand() throws IOException { diff --git a/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java b/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java index 45b98c27e97c..224508bf5960 100644 --- a/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java +++ b/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java @@ -605,6 +605,31 @@ public void testAuditLogEnableLoggerTransitions() throws Exception StorageService.instance.disableAuditLog(); } + @Test + public void testAuditLogJmxUpdatesConfig() throws Exception + { + DatabaseDescriptor.setAuditLoggingOptions(getBaseAuditLogOptions()); + + StorageService.instance.enableAuditLog(null, null, null, null, null, null, null, null); + assertTrue(DatabaseDescriptor.getAuditLoggingOptions().enabled); + + StorageService.instance.disableAuditLog(); + Assert.assertFalse(DatabaseDescriptor.getAuditLoggingOptions().enabled); + } + + @Test + public void testSnitchSettersUpdateConfig() + { + DatabaseDescriptor.setDynamicSnitch(false); + Assert.assertFalse(DatabaseDescriptor.isDynamicSnitch()); + DatabaseDescriptor.setDynamicSnitch(true); + assertTrue(DatabaseDescriptor.isDynamicSnitch()); + + DatabaseDescriptor.setEndpointSnitch("org.apache.cassandra.locator.SimpleSnitch"); + Assert.assertEquals("org.apache.cassandra.locator.SimpleSnitch", + DatabaseDescriptor.getRawConfig().endpoint_snitch); + } + /** Create a new AuditLogOptions instance with the log dir set appropriately to a temp dir for unit testing. */