Fix CQL3 BATCH authorization caching

patch by Aleksey Yeschenko; reviewed by Sylvain Lebresne for CASSANDRA-5145


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

Branch: refs/heads/trunk
Commit: 3bb84e9e2acd351c44d438acff2abeaedc00d506
Parents: ccdb632
Author: Aleksey Yeschenko <alek...@apache.org>
Authored: Fri Jan 11 19:36:44 2013 +0300
Committer: Aleksey Yeschenko <alek...@apache.org>
Committed: Fri Jan 11 19:36:44 2013 +0300

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../cassandra/cql3/statements/BatchStatement.java  |   17 ++++++++++----
 2 files changed, 13 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bb84e9e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 58dbc7b..9712791 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -7,6 +7,7 @@
  * Pig: correctly decode row keys in widerow mode (CASSANDRA-5098)
  * nodetool repair command now prints progress (CASSANDRA-4767)
  * fix user defined compaction to run against 1.1 data directory 
(CASSANDRA-5118)
+ * Fix CQL3 BATCH authorization caching (CASSANDRA-5145)
 
 
 1.1.8

http://git-wip-us.apache.org/repos/asf/cassandra/blob/3bb84e9e/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java 
b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
index 2241b05..e0137a8 100644
--- a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
@@ -65,14 +65,21 @@ public class BatchStatement extends ModificationStatement
     @Override
     public void checkAccess(ClientState state) throws InvalidRequestException
     {
-        Set<String> cfamsSeen = new HashSet<String>();
+        Map<String, Set<String>> cfamsSeen = new HashMap<String, 
Set<String>>();
         for (ModificationStatement statement : statements)
         {
-            // Avoid unnecessary authorizations.
-            if (!(cfamsSeen.contains(statement.columnFamily())))
+            String ks = statement.keyspace();
+            String cf = statement.columnFamily();
+
+            if (!cfamsSeen.containsKey(ks))
+                cfamsSeen.put(ks, new HashSet<String>());
+
+            // Avoid unnecessary authorization.
+            Set<String> cfs = cfamsSeen.get(ks);
+            if (!(cfs.contains(cf)))
             {
-                state.hasColumnFamilyAccess(statement.keyspace(), 
statement.columnFamily(), Permission.WRITE);
-                cfamsSeen.add(statement.columnFamily());
+                state.hasColumnFamilyAccess(ks, cf, Permission.WRITE);
+                cfs.add(cf);
             }
         }
     }

Reply via email to