You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2014/05/22 16:02:34 UTC

git commit: Work around initialization problem

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 1147ee3a8 -> 36cc02ca7


Work around initialization problem


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/36cc02ca
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/36cc02ca
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/36cc02ca

Branch: refs/heads/cassandra-2.1
Commit: 36cc02ca76fa11b6b1d2cb24fb068d2a5dfaa842
Parents: 1147ee3
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Thu May 22 16:02:23 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Thu May 22 16:02:23 2014 +0200

----------------------------------------------------------------------
 .../apache/cassandra/cql3/QueryProcessor.java   | 46 +++++++++++++-------
 1 file changed, 31 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/36cc02ca/src/java/org/apache/cassandra/cql3/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
index fca9c42..fd6e6ce 100644
--- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
@@ -82,7 +82,6 @@ public class QueryProcessor implements QueryHandler
     // A map for prepared statements used internally (which we don't want to mix with user statement, in particular we don't
     // bother with expiration on those.
     private static final ConcurrentMap<String, ParsedStatement.Prepared> internalStatements = new ConcurrentHashMap<>();
-    private static final QueryState internalQueryState;
 
     static
     {
@@ -95,16 +94,33 @@ public class QueryProcessor implements QueryHandler
                                    .weigher(thriftMemoryUsageWeigher)
                                    .build();
 
-        ClientState state = ClientState.forInternalCalls();
-        try
-        {
-            state.setKeyspace(Keyspace.SYSTEM_KS);
-        }
-        catch (InvalidRequestException e)
+    }
+
+    // Work aound initialization dependency
+    private static enum InternalStateInstance
+    {
+        INSTANCE;
+
+        private final QueryState queryState;
+
+        InternalStateInstance()
         {
-            throw new RuntimeException();
+            ClientState state = ClientState.forInternalCalls();
+            try
+            {
+                state.setKeyspace(Keyspace.SYSTEM_KS);
+            }
+            catch (InvalidRequestException e)
+            {
+                throw new RuntimeException();
+            }
+            this.queryState = new QueryState(state);
         }
-        internalQueryState = new QueryState(state);
+    }
+
+    private static QueryState internalQueryState()
+    {
+        return InternalStateInstance.INSTANCE.queryState;
     }
 
     private QueryProcessor()
@@ -233,8 +249,8 @@ public class QueryProcessor implements QueryHandler
             return prepared;
 
         // Note: if 2 threads prepare the same query, we'll live so don't bother synchronizing
-        prepared = parseStatement(query, internalQueryState);
-        prepared.statement.validate(internalQueryState.getClientState());
+        prepared = parseStatement(query, internalQueryState());
+        prepared.statement.validate(internalQueryState().getClientState());
         internalStatements.putIfAbsent(query, prepared);
         return prepared;
     }
@@ -244,7 +260,7 @@ public class QueryProcessor implements QueryHandler
         try
         {
             ParsedStatement.Prepared prepared = prepareInternal(query);
-            ResultMessage result = prepared.statement.executeInternal(internalQueryState, makeInternalOptions(prepared, values));
+            ResultMessage result = prepared.statement.executeInternal(internalQueryState(), makeInternalOptions(prepared, values));
             if (result instanceof ResultMessage.Rows)
                 return UntypedResultSet.create(((ResultMessage.Rows)result).result);
             else
@@ -286,9 +302,9 @@ public class QueryProcessor implements QueryHandler
     {
         try
         {
-            ParsedStatement.Prepared prepared = parseStatement(query, internalQueryState);
-            prepared.statement.validate(internalQueryState.getClientState());
-            ResultMessage result = prepared.statement.executeInternal(internalQueryState, makeInternalOptions(prepared, values));
+            ParsedStatement.Prepared prepared = parseStatement(query, internalQueryState());
+            prepared.statement.validate(internalQueryState().getClientState());
+            ResultMessage result = prepared.statement.executeInternal(internalQueryState(), makeInternalOptions(prepared, values));
             if (result instanceof ResultMessage.Rows)
                 return UntypedResultSet.create(((ResultMessage.Rows)result).result);
             else