You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2016/08/27 07:59:50 UTC

cassandra git commit: Replace Config.setClientMode with DatabaseDescriptor.clientInit()

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
     {