Updated Branches: refs/heads/trunk ebae28ec2 -> 98eb543a9
grant internal components ability to modify system keyspace, related to CASSANDRA-4664. Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/98eb543a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/98eb543a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/98eb543a Branch: refs/heads/trunk Commit: 98eb543a9829c1e857612edc6376a192f7ce4cff Parents: ebae28e Author: Pavel Yaskevich <[email protected]> Authored: Fri Sep 21 13:33:54 2012 +0300 Committer: Pavel Yaskevich <[email protected]> Committed: Fri Sep 21 13:33:54 2012 +0300 ---------------------------------------------------------------------- .../org/apache/cassandra/cql3/QueryProcessor.java | 2 +- .../org/apache/cassandra/service/ClientState.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/98eb543a/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 3fc8d99..0943029 100644 --- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java +++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java @@ -120,7 +120,7 @@ public class QueryProcessor { try { - ClientState state = new ClientState(); + ClientState state = new ClientState(true); ResultMessage result = processStatement(getStatement(query, state).statement, state, Collections.<ByteBuffer>emptyList()); if (result instanceof ResultMessage.Rows) return new UntypedResultSet(((ResultMessage.Rows)result).result); http://git-wip-us.apache.org/repos/asf/cassandra/blob/98eb543a/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 51194d5..00b6039 100644 --- a/src/java/org/apache/cassandra/service/ClientState.java +++ b/src/java/org/apache/cassandra/service/ClientState.java @@ -73,11 +73,21 @@ public class ClientState private long clock; + // internalCall is used to mark ClientState as used by some internal component + // that should have an ability to modify system keyspace + private final boolean internalCall; + + public ClientState() + { + this(false); + } + /** * Construct a new, empty ClientState: can be reused after logout() or reset(). */ - public ClientState() + public ClientState(boolean internalCall) { + this.internalCall = internalCall; reset(); } @@ -230,7 +240,8 @@ public class ClientState resourceClear(); resource.add(keyspace); - preventSystemKSModification(keyspace, perm); + if (!internalCall) + preventSystemKSModification(keyspace, perm); // check if keyspace access is set to Permission.FULL_ACCESS // (which means that user has all access on keyspace and it's underlying elements)
