Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 36cc02ca7 -> 9bd388780 refs/heads/trunk 5f643ffcc -> 864865da9
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/trunk Commit: 36cc02ca76fa11b6b1d2cb24fb068d2a5dfaa842 Parents: 1147ee3 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Thu May 22 16:02:23 2014 +0200 Committer: Sylvain Lebresne <sylv...@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