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/cassandra-1.2 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); } } }