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)

Reply via email to