Repository: cassandra Updated Branches: refs/heads/trunk a8743c6e3 -> 29239c765
Replace Config.setClientMode with DatabaseDescriptor.clientInit() patch by Robert Stupp; reviewed by Jeremiah Jordan for CASSANDRA-12550 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/29239c76 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/29239c76 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/29239c76 Branch: refs/heads/trunk Commit: 29239c765c22a7c1cb3a64476ebf0dfa9e2f9da0 Parents: a8743c6 Author: Robert Stupp <sn...@snazy.de> Authored: Sat Aug 27 09:59:11 2016 +0200 Committer: Robert Stupp <sn...@snazy.de> Committed: Sat Aug 27 09:59:11 2016 +0200 ---------------------------------------------------------------------- CHANGES.txt | 2 +- NEWS.txt | 3 +- .../org/apache/cassandra/config/Config.java | 27 ++---- .../cassandra/config/DatabaseDescriptor.java | 88 ++++++++++++++++++-- .../org/apache/cassandra/config/Schema.java | 2 +- src/java/org/apache/cassandra/db/Keyspace.java | 2 +- .../cassandra/io/sstable/CQLSSTableWriter.java | 2 +- .../io/sstable/format/SSTableReader.java | 4 +- .../locator/DynamicEndpointSnitch.java | 7 +- .../apache/cassandra/service/ClientState.java | 3 +- .../io/sstable/CQLSSTableWriterLongTest.java | 6 -- .../cassandra/streaming/LongStreamingTest.java | 6 -- .../test/microbench/MutationBench.java | 2 +- .../io/sstable/CQLSSTableWriterClientTest.java | 18 ++-- .../io/sstable/CQLSSTableWriterTest.java | 6 -- 15 files changed, 105 insertions(+), 73 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index b3975da..3dd46de 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,7 +9,7 @@ * Extend read/write failure messages with a map of replica addresses to error codes in the v5 native protocol (CASSANDRA-12311) * Fix rebuild of SASI indexes with existing index files (CASSANDRA-12374) - * Let DatabaseDescriptor not implicitly startup services (CASSANDRA-9054) + * Let DatabaseDescriptor not implicitly startup services (CASSANDRA-9054, 12550) * Fix clustering indexes in presence of static columns in SASI (CASSANDRA-12378) * Fix queries on columns with reversed type on SASI indexes (CASSANDRA-12223) * Added slow query log (CASSANDRA-12403) http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/NEWS.txt ---------------------------------------------------------------------- diff --git a/NEWS.txt b/NEWS.txt index a22fdd8..bb21c3c 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -87,7 +87,8 @@ Upgrading a standalone tool or client application, use the DatabaseDescriptor.toolInitialization() or DatabaseDescriptor.clientInitialization() methods. Tool initialization sets up partitioner, snitch, encryption context. Client initialization just applies the configuration but does not - setup anything. + setup anything. Instead of using Config.setClientMode() or Config.isClientMode(), which are + deprecated now, use one of the appropiate new methods in DatabaseDescriptor. 3.8 === http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/config/Config.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index 7248031..87f664d 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -257,7 +257,6 @@ public class Config public volatile int counter_cache_keys_to_save = Integer.MAX_VALUE; private static boolean isClientMode = false; - private static boolean isToolsMode = false; public Integer file_cache_size_in_mb; @@ -360,6 +359,10 @@ public class Config outboundBindAny = value; } + /** + * @deprecated migrate to {@link DatabaseDescriptor#isClientInitialized()} + */ + @Deprecated public static boolean isClientMode() { return isClientMode; @@ -368,31 +371,15 @@ public class Config /** * Client mode means that the process is a pure client, that uses C* code base but does * not read or write local C* database files. + * + * @deprecated migrate to {@link DatabaseDescriptor#clientInitialization(boolean)} */ + @Deprecated public static void setClientMode(boolean clientMode) { isClientMode = clientMode; } - public static boolean isToolsMode() - { - return isToolsMode; - } - - /** - * Tools mode means that the process is a standalone (offline) C* tool that may (or may not) - * read or write local C* database files. - */ - public static void setToolsMode(boolean toolsMode) - { - isToolsMode = toolsMode; - } - - public static boolean isClientOrToolsMode() - { - return isClientMode() || isToolsMode(); - } - public enum CommitLogSync { periodic, http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/config/DatabaseDescriptor.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 8b33242..8e45731 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -118,8 +118,10 @@ public class DatabaseDescriptor public static void daemonInitialization() throws ConfigurationException { - assert !toolInitialized; - assert !clientInitialized; + if (toolInitialized) + throw new AssertionError("toolInitialization() already called"); + if (clientInitialized) + throw new AssertionError("clientInitialization() already called"); // Some unit tests require this :( if (daemonInitialized) @@ -131,17 +133,40 @@ public class DatabaseDescriptor AuthConfig.applyAuth(); } + /** + * Equivalent to {@link #toolInitialization(boolean) toolInitialization(true)}. + */ public static void toolInitialization() { - assert !daemonInitialized; - assert !clientInitialized; + toolInitialization(true); + } + + /** + * Initializes this class as a tool, which means that the configuration is loaded + * using {@link #loadConfig()} and all non-daemon configuration parts will be setup. + * + * @param failIfDaemonOrClient if {@code true} and a call to {@link #daemonInitialization()} or + * {@link #clientInitialization()} has been performed before, an + * {@link AssertionError} will be thrown. + */ + public static void toolInitialization(boolean failIfDaemonOrClient) + { + if (!failIfDaemonOrClient && (daemonInitialized || clientInitialized)) + { + return; + } + else + { + if (daemonInitialized) + throw new AssertionError("daemonInitialization() already called"); + if (clientInitialized) + throw new AssertionError("clientInitialization() already called"); + } if (toolInitialized) return; toolInitialized = true; - Config.setToolsMode(true); - setConfig(loadConfig()); applySimpleConfig(); @@ -153,10 +178,35 @@ public class DatabaseDescriptor applyEncryptionContext(); } + /** + * Equivalent to {@link #clientInitialization(boolean) clientInitialization(true)}. + */ public static void clientInitialization() { - assert !daemonInitialized; - assert !toolInitialized; + clientInitialization(true); + } + + /** + * Initializes this class as a client, which means that just an empty configuration will + * be used. + * + * @param failIfDaemonOrTool if {@code true} and a call to {@link #daemonInitialization()} or + * {@link #toolInitialization()} has been performed before, an + * {@link AssertionError} will be thrown. + */ + public static void clientInitialization(boolean failIfDaemonOrTool) + { + if (!failIfDaemonOrTool && (daemonInitialized || toolInitialized)) + { + return; + } + else + { + if (daemonInitialized) + throw new AssertionError("daemonInitialization() already called"); + if (toolInitialized) + throw new AssertionError("toolInitialization() already called"); + } if (clientInitialized) return; @@ -166,6 +216,26 @@ public class DatabaseDescriptor conf = new Config(); } + public static boolean isClientInitialized() + { + return clientInitialized; + } + + public static boolean isToolInitialized() + { + return toolInitialized; + } + + public static boolean isClientOrToolInitialized() + { + return clientInitialized || toolInitialized; + } + + public static boolean isDaemonInitialized() + { + return daemonInitialized; + } + public static Config getRawConfig() { return conf; @@ -1916,7 +1986,7 @@ public class DatabaseDescriptor if (conf.file_cache_size_in_mb == null) { // In client mode the value is not set. - assert Config.isClientMode(); + assert DatabaseDescriptor.isClientInitialized(); return 0; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/config/Schema.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/Schema.java b/src/java/org/apache/cassandra/config/Schema.java index eed316b..d01d862 100644 --- a/src/java/org/apache/cassandra/config/Schema.java +++ b/src/java/org/apache/cassandra/config/Schema.java @@ -64,7 +64,7 @@ public class Schema */ public Schema() { - if (!Config.isClientMode()) + if (DatabaseDescriptor.isDaemonInitialized() || DatabaseDescriptor.isToolInitialized()) { load(SchemaKeyspace.metadata()); load(SystemKeyspace.metadata()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/db/Keyspace.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/Keyspace.java b/src/java/org/apache/cassandra/db/Keyspace.java index 741058f..9e998e6 100644 --- a/src/java/org/apache/cassandra/db/Keyspace.java +++ b/src/java/org/apache/cassandra/db/Keyspace.java @@ -68,7 +68,7 @@ public class Keyspace // proper directories here as well as in CassandraDaemon. static { - if (!Config.isClientMode()) + if (DatabaseDescriptor.isDaemonInitialized() || DatabaseDescriptor.isToolInitialized()) DatabaseDescriptor.createAllDirectories(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java index a6805df..b02e29f 100644 --- a/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/CQLSSTableWriter.java @@ -102,7 +102,7 @@ public class CQLSSTableWriter implements Closeable static { - Config.setClientMode(true); + DatabaseDescriptor.clientInitialization(false); // Partitioner is not set in client mode. if (DatabaseDescriptor.getPartitioner() == null) DatabaseDescriptor.setPartitionerUnsafe(Murmur3Partitioner.instance); http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java index 6c2243b..d2c83bf 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java @@ -140,7 +140,7 @@ public abstract class SSTableReader extends SSTable implements SelfRefCounted<SS private static final ScheduledThreadPoolExecutor syncExecutor = initSyncExecutor(); private static ScheduledThreadPoolExecutor initSyncExecutor() { - if (Config.isClientOrToolsMode()) + if (DatabaseDescriptor.isClientOrToolInitialized()) return null; // Do NOT start this thread pool in client mode @@ -2214,7 +2214,7 @@ public abstract class SSTableReader extends SSTable implements SelfRefCounted<SS // Don't track read rates for tables in the system keyspace and don't bother trying to load or persist // the read meter when in client mode. // Also, do not track read rates when running in client or tools mode (syncExecuter isn't available in these modes) - if (SchemaConstants.isSystemKeyspace(desc.ksname) || Config.isClientOrToolsMode()) + if (SchemaConstants.isSystemKeyspace(desc.ksname) || DatabaseDescriptor.isClientOrToolInitialized()) { readMeter = null; readMeterSyncFuture = NULL; http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java index ba587f3..247d550 100644 --- a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java +++ b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java @@ -31,7 +31,6 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import org.apache.cassandra.concurrent.ScheduledExecutors; -import org.apache.cassandra.config.Config; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.gms.ApplicationState; import org.apache.cassandra.gms.EndpointState; @@ -102,7 +101,7 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements ILa } }; - if (!Config.isClientOrToolsMode()) + if (DatabaseDescriptor.isDaemonInitialized()) { updateSchedular = ScheduledExecutors.scheduledTasks.scheduleWithFixedDelay(update, dynamicUpdateInterval, dynamicUpdateInterval, TimeUnit.MILLISECONDS); resetSchedular = ScheduledExecutors.scheduledTasks.scheduleWithFixedDelay(reset, dynamicResetInterval, dynamicResetInterval, TimeUnit.MILLISECONDS); @@ -119,7 +118,7 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements ILa if (dynamicUpdateInterval != DatabaseDescriptor.getDynamicUpdateInterval()) { dynamicUpdateInterval = DatabaseDescriptor.getDynamicUpdateInterval(); - if (!Config.isClientOrToolsMode()) + if (DatabaseDescriptor.isDaemonInitialized()) { updateSchedular.cancel(false); updateSchedular = ScheduledExecutors.scheduledTasks.scheduleWithFixedDelay(update, dynamicUpdateInterval, dynamicUpdateInterval, TimeUnit.MILLISECONDS); @@ -129,7 +128,7 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements ILa if (dynamicResetInterval != DatabaseDescriptor.getDynamicResetInterval()) { dynamicResetInterval = DatabaseDescriptor.getDynamicResetInterval(); - if (!Config.isClientOrToolsMode()) + if (DatabaseDescriptor.isDaemonInitialized()) { resetSchedular.cancel(false); resetSchedular = ScheduledExecutors.scheduledTasks.scheduleWithFixedDelay(reset, dynamicResetInterval, dynamicResetInterval, TimeUnit.MILLISECONDS); http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/src/java/org/apache/cassandra/service/ClientState.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/ClientState.java b/src/java/org/apache/cassandra/service/ClientState.java index b109b67..5f01702 100644 --- a/src/java/org/apache/cassandra/service/ClientState.java +++ b/src/java/org/apache/cassandra/service/ClientState.java @@ -28,7 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.auth.*; -import org.apache.cassandra.config.Config; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.config.Schema; @@ -68,7 +67,7 @@ public class ClientState SchemaKeyspace.ALL.forEach(table -> READABLE_SYSTEM_RESOURCES.add(DataResource.table(SchemaConstants.SCHEMA_KEYSPACE_NAME, table))); // neither clients nor tools need authentication/authorization - if (!Config.isClientOrToolsMode()) + if (DatabaseDescriptor.isDaemonInitialized()) { PROTECTED_AUTH_RESOURCES.addAll(DatabaseDescriptor.getAuthenticator().protectedResources()); PROTECTED_AUTH_RESOURCES.addAll(DatabaseDescriptor.getAuthorizer().protectedResources()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java ---------------------------------------------------------------------- diff --git a/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java b/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java index b48336f..9674ca3 100644 --- a/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java +++ b/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java @@ -41,12 +41,6 @@ public class CQLSSTableWriterLongTest StorageService.instance.initServer(); } - @AfterClass - public static void tearDown() - { - Config.setClientMode(false); - } - @Test public void testWideRow() throws Exception { http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/test/long/org/apache/cassandra/streaming/LongStreamingTest.java ---------------------------------------------------------------------- diff --git a/test/long/org/apache/cassandra/streaming/LongStreamingTest.java b/test/long/org/apache/cassandra/streaming/LongStreamingTest.java index 3d6f7ae..51b049d 100644 --- a/test/long/org/apache/cassandra/streaming/LongStreamingTest.java +++ b/test/long/org/apache/cassandra/streaming/LongStreamingTest.java @@ -63,12 +63,6 @@ public class LongStreamingTest StorageService.instance.setInterDCStreamThroughputMbPerSec(0); } - @AfterClass - public static void tearDown() - { - Config.setClientMode(false); - } - @Test public void testCompressedStream() throws InvalidRequestException, IOException, ExecutionException, InterruptedException { http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/test/microbench/org/apache/cassandra/test/microbench/MutationBench.java ---------------------------------------------------------------------- diff --git a/test/microbench/org/apache/cassandra/test/microbench/MutationBench.java b/test/microbench/org/apache/cassandra/test/microbench/MutationBench.java index 89dcb0f..8c177cf 100644 --- a/test/microbench/org/apache/cassandra/test/microbench/MutationBench.java +++ b/test/microbench/org/apache/cassandra/test/microbench/MutationBench.java @@ -64,7 +64,7 @@ public class MutationBench { static { - Config.setClientMode(true); + DatabaseDescriptor.clientInitialization(false); // Partitioner is not set in client mode. if (DatabaseDescriptor.getPartitioner() == null) DatabaseDescriptor.setPartitionerUnsafe(Murmur3Partitioner.instance); http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterClientTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterClientTest.java b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterClientTest.java index 7fed8b1..9502dfa 100644 --- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterClientTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterClientTest.java @@ -47,18 +47,6 @@ public class CQLSSTableWriterClientTest DatabaseDescriptor.daemonInitialization(); } - @After - public void tearDown() - { - FileUtils.deleteRecursive(this.testDirectory); - } - - @AfterClass - public static void cleanup() throws Exception - { - Config.setClientMode(false); - } - @Test public void testWriterInClientMode() throws IOException, InvalidRequestException { @@ -95,4 +83,10 @@ public class CQLSSTableWriterClientTest writer.getInnermostDirectory().listFiles(filter)); assertEquals(2, dataFiles.length); } + + @After + public void tearDown() + { + FileUtils.deleteRecursive(this.testDirectory); + } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/29239c76/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java index 56409c4..56e62ee 100644 --- a/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java @@ -67,12 +67,6 @@ public class CQLSSTableWriterTest StorageService.instance.initServer(); } - @AfterClass - public static void tearDown() throws Exception - { - Config.setClientMode(false); - } - @Test public void testUnsortedWriter() throws Exception {