Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 a2088b115 -> 796db6e09
Avoid NoSuchElementException on empty batch Patch by Tyler Hobbs; reviewed by Sylvain Lebresne for CASSANDRA-10711 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/796db6e0 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/796db6e0 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/796db6e0 Branch: refs/heads/cassandra-3.0 Commit: 796db6e09c2c5f462df7d75513b3b765ed0404da Parents: a2088b1 Author: Tyler Hobbs <tylerlho...@gmail.com> Authored: Tue Dec 22 16:24:11 2015 -0600 Committer: Tyler Hobbs <tylerlho...@gmail.com> Committed: Tue Dec 22 16:24:11 2015 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/cql3/statements/BatchStatement.java | 3 +++ test/unit/org/apache/cassandra/cql3/BatchTests.java | 9 ++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/796db6e0/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index be39f29..7794c96 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.3 + * Avoid NoSuchElementException when executing empty batch (CASSANDRA-10711) * Avoid building PartitionUpdate in toString (CASSANDRA-10897) * Reduce heap spent when receiving many SSTables (CASSANDRA-10797) * Add back support for 3rd party auth providers to bulk loader (CASSANDRA-10873) http://git-wip-us.apache.org/repos/asf/cassandra/blob/796db6e0/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 1f1d507..dc7ef73 100644 --- a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java @@ -340,6 +340,9 @@ public class BatchStatement implements CQLStatement private void executeWithoutConditions(Collection<? extends IMutation> mutations, ConsistencyLevel cl) throws RequestExecutionException, RequestValidationException { + if (mutations.isEmpty()) + return; + // Extract each collection of updates from it's IMutation and then lazily concatenate all of them into a single Iterable. Iterable<PartitionUpdate> updates = Iterables.concat(Iterables.transform(mutations, new Function<IMutation, Collection<PartitionUpdate>>() { http://git-wip-us.apache.org/repos/asf/cassandra/blob/796db6e0/test/unit/org/apache/cassandra/cql3/BatchTests.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/BatchTests.java b/test/unit/org/apache/cassandra/cql3/BatchTests.java index 95fe612..73923fb 100644 --- a/test/unit/org/apache/cassandra/cql3/BatchTests.java +++ b/test/unit/org/apache/cassandra/cql3/BatchTests.java @@ -37,7 +37,6 @@ public class BatchTests private static Cluster cluster; private static Session session; - private static PreparedStatement counter; private static PreparedStatement noncounter; @@ -114,6 +113,12 @@ public class BatchTests sendBatch(BatchStatement.Type.UNLOGGED, true, false); } + @Test + public void testEmptyBatch() + { + session.execute("BEGIN BATCH APPLY BATCH"); + session.execute("BEGIN UNLOGGED BATCH APPLY BATCH"); + } @Test(expected = InvalidQueryException.class) public void testCounterInLoggedBatch() @@ -133,8 +138,6 @@ public class BatchTests session.execute(b); } - - public void sendBatch(BatchStatement.Type type, boolean addCounter, boolean addNonCounter) {