Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 4d00468cc -> 3615da583
Fix PartitionUpdate.operationCount()for updates with static column
patch by Benjamin Lerer; reviewed by Sylvain Lebresne for CASSANDRA-10606
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3615da58
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3615da58
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3615da58
Branch: refs/heads/cassandra-3.0
Commit: 3615da58310a778c7ee6d9b2d77fd3fb7a6700f4
Parents: 4d00468
Author: Benjamin Lerer <b.lerer@gmail.com>
Authored: Wed Oct 28 17:41:03 2015 +0100
Committer: Benjamin Lerer <b.lerer@gmail.com>
Committed: Wed Oct 28 17:41:03 2015 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/partitions/PartitionUpdate.java | 1 +
.../db/partition/PartitionUpdateTest.java | 67 ++++++++++++++++++++
3 files changed, 69 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3615da58/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3423a1e..c51cb51 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0
+ * Fix PartitionUpdate.operationCount()for updates with static column operations (CASSANDRA-10606)
* Fix thrift get() queries with defined columns (CASSANDRA-10586)
* Fix marking of indexes as built and removed (CASSANDRA-10601)
* Skip initialization of non-registered 2i instances, remove Index::getIndexName (CASSANDRA-10595)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3615da58/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
index b1776ca..52f8f67 100644
--- a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
+++ b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
@@ -334,6 +334,7 @@ public class PartitionUpdate extends AbstractBTreePartition
public int operationCount()
{
return rowCount()
+ + (staticRow().isEmpty() ? 0 : 1)
+ deletionInfo.rangeCount()
+ (deletionInfo.getPartitionDeletion().isLive() ? 0 : 1);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3615da58/test/unit/org/apache/cassandra/db/partition/PartitionUpdateTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/partition/PartitionUpdateTest.java b/test/unit/org/apache/cassandra/db/partition/PartitionUpdateTest.java
new file mode 100644
index 0000000..a069db1
--- /dev/null
+++ b/test/unit/org/apache/cassandra/db/partition/PartitionUpdateTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.db.partition;
+
+import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.cql3.CQLTester;
+import org.apache.cassandra.db.RowUpdateBuilder;
+import org.apache.cassandra.db.partitions.PartitionUpdate;
+import org.apache.cassandra.utils.FBUtilities;
+import org.junit.Test;
+
+import junit.framework.Assert;
+
+public class PartitionUpdateTest extends CQLTester
+{
+ @Test
+ public void testOperationCount()
+ {
+ createTable("CREATE TABLE %s (key text, clustering int, a int, s int static, PRIMARY
KEY(key, clustering))");
+ CFMetaData cfm = currentTableMetadata();
+
+ long timestamp = FBUtilities.timestampMicros();
+ PartitionUpdate update = new RowUpdateBuilder(cfm, timestamp, "key0").clustering(1).add("a",
1).buildUpdate();
+ Assert.assertEquals(1, update.operationCount());
+
+ update = new RowUpdateBuilder(cfm, timestamp, "key0").buildUpdate();
+ Assert.assertEquals(0, update.operationCount());
+
+ update = new RowUpdateBuilder(cfm, timestamp, "key0").add("s", 1).buildUpdate();
+ Assert.assertEquals(1, update.operationCount());
+
+ update = new RowUpdateBuilder(cfm, timestamp, "key0").add("s", 1).buildUpdate();
+ update = new RowUpdateBuilder(update, timestamp, cfm.params.defaultTimeToLive).clustering(1)
+ .add("a",
1)
+ .buildUpdate();
+ Assert.assertEquals(2, update.operationCount());
+ }
+
+ @Test
+ public void testOperationCountWithCompactTable()
+ {
+ createTable("CREATE TABLE %s (key text PRIMARY KEY, a int) WITH COMPACT STORAGE");
+ CFMetaData cfm = currentTableMetadata();
+
+ PartitionUpdate update = new RowUpdateBuilder(cfm, FBUtilities.timestampMicros(),
"key0").add("a", 1)
+
.buildUpdate();
+ Assert.assertEquals(1, update.operationCount());
+
+ update = new RowUpdateBuilder(cfm, FBUtilities.timestampMicros(), "key0").buildUpdate();
+ Assert.assertEquals(0, update.operationCount());
+ }
+}
|