diff --git a/CHANGES.txt b/CHANGES.txt index 58dbc7b542..97127915be 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 diff --git a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java index 2241b0589e..e0137a8915 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 cfamsSeen = new HashSet(); + Map> cfamsSeen = new HashMap>(); 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()); + + // Avoid unnecessary authorization. + Set 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); } } }