You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2015/08/10 17:24:26 UTC
cassandra git commit: Fix for Row deletion bug in Materialized Views
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 45c04b727 -> 2fcfc7c58
Fix for Row deletion bug in Materialized Views
patch by carl; reviewed by tjake for CASSANDRA-10014
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2fcfc7c5
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2fcfc7c5
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2fcfc7c5
Branch: refs/heads/cassandra-3.0
Commit: 2fcfc7c58aafb59b51580a7fdef5f849f38dc637
Parents: 45c04b7
Author: Carl Yeksigian <ca...@apache.org>
Authored: Fri Aug 7 14:32:20 2015 -0400
Committer: T Jake Luciani <ja...@apache.org>
Committed: Mon Aug 10 11:23:16 2015 -0400
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/db/view/MaterializedView.java | 7 +++-
.../cassandra/cql3/MaterializedViewTest.java | 43 ++++++++++++++++++++
3 files changed, 50 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fcfc7c5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 639dd59..c7d466a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.0-beta1
+ * Fix row deletion bug for Materialized Views (CASSANDRA-10014)
* Support mixed-version clusters with Cassandra 2.1 and 2.2 (CASSANDRA-9704)
* Fix multiple slices on RowSearchers (CASSANDRA-10002)
* Fix bug in merging of collections (CASSANDRA-10001)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fcfc7c5/src/java/org/apache/cassandra/db/view/MaterializedView.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/view/MaterializedView.java b/src/java/org/apache/cassandra/db/view/MaterializedView.java
index 06c4dc2..c953d5f 100644
--- a/src/java/org/apache/cassandra/db/view/MaterializedView.java
+++ b/src/java/org/apache/cassandra/db/view/MaterializedView.java
@@ -216,9 +216,14 @@ public class MaterializedView
if (!partition.deletionInfo().isLive())
return true;
- // Check whether the update touches any of the columns included in the view
+ // Check each row for deletion or update
for (Row row : partition)
{
+ if (row.hasComplexDeletion())
+ return true;
+ if (!row.deletion().isLive())
+ return true;
+
for (ColumnData data : row)
{
if (getViewCfs().metadata.getColumnDefinition(data.column().name) != null)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2fcfc7c5/test/unit/org/apache/cassandra/cql3/MaterializedViewTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/MaterializedViewTest.java b/test/unit/org/apache/cassandra/cql3/MaterializedViewTest.java
index 78c40e2..faff229 100644
--- a/test/unit/org/apache/cassandra/cql3/MaterializedViewTest.java
+++ b/test/unit/org/apache/cassandra/cql3/MaterializedViewTest.java
@@ -90,6 +90,49 @@ public class MaterializedViewTest extends CQLTester
}
}
+ @Test
+ public void testPartitionTombstone() throws Throwable
+ {
+ createTable("CREATE TABLE %s (k1 int, c1 int , val int, PRIMARY KEY (k1))");
+
+ execute("USE " + keyspace());
+ executeNet(protocolVersion, "USE " + keyspace());
+
+ createView("view1", "CREATE MATERIALIZED VIEW view1 AS SELECT k1 FROM %%s WHERE k1 IS NOT NULL AND c1 IS NOT NULL AND val IS NOT NULL PRIMARY KEY (val, k1, c1)");
+
+ updateMV("INSERT INTO %s (k1, c1, val) VALUES (1, 2, 200)");
+ updateMV("INSERT INTO %s (k1, c1, val) VALUES (1, 3, 300)");
+
+ Assert.assertEquals(1, execute("select * from %s").size());
+ Assert.assertEquals(1, execute("select * from view1").size());
+
+ updateMV("DELETE FROM %s WHERE k1 = 1");
+
+ Assert.assertEquals(0, execute("select * from %s").size());
+ Assert.assertEquals(0, execute("select * from view1").size());
+ }
+
+ @Test
+ public void testClusteringKeyTombstone() throws Throwable
+ {
+ createTable("CREATE TABLE %s (k1 int, c1 int , val int, PRIMARY KEY (k1, c1))");
+
+ execute("USE " + keyspace());
+ executeNet(protocolVersion, "USE " + keyspace());
+
+ createView("view1", "CREATE MATERIALIZED VIEW view1 AS SELECT k1 FROM %%s WHERE k1 IS NOT NULL AND c1 IS NOT NULL AND val IS NOT NULL PRIMARY KEY (val, k1, c1)");
+
+ updateMV("INSERT INTO %s (k1, c1, val) VALUES (1, 2, 200)");
+ updateMV("INSERT INTO %s (k1, c1, val) VALUES (1, 3, 300)");
+
+ Assert.assertEquals(2, execute("select * from %s").size());
+ Assert.assertEquals(2, execute("select * from view1").size());
+
+ updateMV("DELETE FROM %s WHERE k1 = 1 and c1 = 3");
+
+ Assert.assertEquals(1, execute("select * from %s").size());
+ Assert.assertEquals(1, execute("select * from view1").size());
+ }
@Test
public void testAccessAndSchema() throws Throwable