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