Copy ResultSet on count query to avoid ConcurrentModificationException

patch by slebresne; reviewed by jbellis for CASSANDRA-5282


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

Branch: refs/heads/trunk
Commit: 61e329f7aea6a502c274277ca448c6207072a376
Parents: 193e566
Author: Sylvain Lebresne <sylv...@datastax.com>
Authored: Wed Mar 27 11:41:36 2013 +0100
Committer: Sylvain Lebresne <sylv...@datastax.com>
Committed: Wed Mar 27 11:41:36 2013 +0100

----------------------------------------------------------------------
 CHANGES.txt                                       |    1 +
 src/java/org/apache/cassandra/cql3/ResultSet.java |   11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/61e329f7/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7eaefaa..26b2360 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -11,6 +11,7 @@
  * Optimize min/max timestamp collection (CASSANDRA-5373)
  * Invalid streamId in cql binary protocol when using invalid CL 
(CASSANDRA-5164)
  * Fix validation for IN where clauses with collections (CASSANDRA-5376)
+ * Copy resultSet on count query to avoid ConcurrentModificationException 
(CASSANDRA-5382)
 Merged from 1.1:
  * cli: Quote ks and cf names in schema output when needed (CASSANDRA-5052)
  * Fix bad default for min/max timestamp in SSTableMetadata (CASSANDRA-5372)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/61e329f7/src/java/org/apache/cassandra/cql3/ResultSet.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ResultSet.java 
b/src/java/org/apache/cassandra/cql3/ResultSet.java
index 290653f..3ddfdc4 100644
--- a/src/java/org/apache/cassandra/cql3/ResultSet.java
+++ b/src/java/org/apache/cassandra/cql3/ResultSet.java
@@ -96,13 +96,12 @@ public class ResultSet
     {
         String ksName = metadata.names.get(0).ksName;
         String cfName = metadata.names.get(0).cfName;
-        metadata.names.clear();
-        metadata.names.add(new ColumnSpecification(ksName, cfName, 
COUNT_COLUMN, LongType.instance));
-
         long count = rows.size();
-        rows.clear();
-        rows.add(Collections.singletonList(ByteBufferUtil.bytes(count)));
-        return this;
+
+        Metadata newMetadata = new Metadata(Collections.singletonList(new 
ColumnSpecification(ksName, cfName, COUNT_COLUMN, LongType.instance)));
+        List<List<ByteBuffer>> newRows = 
Collections.singletonList(Collections.singletonList(ByteBufferUtil.bytes(count)));
+
+        return new ResultSet(newMetadata, newRows);
     }
 
     public CqlResult toThriftResult()

Reply via email to