You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by pa...@apache.org on 2017/08/31 10:37:35 UTC
[2/3] cassandra git commit: Revert CASSANDRA-10368 of support non-pk
base column filtering on MV due to correctness
Revert CASSANDRA-10368 of support non-pk base column filtering on MV due to correctness
Patch by Zhao Yang; Reviewed by Paulo Motta for CASSANDRA-13798
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/425880ff
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/425880ff
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/425880ff
Branch: refs/heads/trunk
Commit: 425880ffb2e6bd5aeaa509fdbfa553db58b74c43
Parents: 4f12c40
Author: Zhao Yang <zh...@gmail.com>
Authored: Fri Aug 25 17:55:22 2017 +0800
Committer: Paulo Motta <pa...@apache.org>
Committed: Thu Aug 31 05:14:05 2017 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
NEWS.txt | 6 ++++++
.../cql3/statements/CreateViewStatement.java | 15 +++++++++++++++
.../org/apache/cassandra/cql3/ViewFilteringTest.java | 9 +++++++++
.../org/apache/cassandra/cql3/ViewSchemaTest.java | 15 +++++++++++++++
5 files changed, 46 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/425880ff/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index af185cf..e5ccf45 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.11.1
+ * Revert CASSANDRA-10368 of supporting non-pk column filtering due to correctness (CASSANDRA-13798)
* Fix cassandra-stress hang issues when an error during cluster connection happens (CASSANDRA-12938)
* Better bootstrap failure message when blocked by (potential) range movement (CASSANDRA-13744)
* "ignore" option is ignored in sstableloader (CASSANDRA-13721)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/425880ff/NEWS.txt
----------------------------------------------------------------------
diff --git a/NEWS.txt b/NEWS.txt
index 10f631f..8e39667 100644
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -26,6 +26,12 @@ Upgrading
Upgrading
---------
+ - Creating Materialized View with filtering on non-primary-key base column
+ (added in CASSANDRA-10368) is disabled, because the liveness of view row
+ is depending on multiple filtered base non-key columns and base non-key
+ column used in view primary-key. This semantic cannot be supported without
+ storage format change, see CASSANDRA-13826. For append-only use case, you
+ may still use this feature with a startup flag: "-Dcassandra.mv.allow_filtering_nonkey_columns_unsafe=true"
- ALTER TABLE (ADD/DROP COLUMN) operations concurrent with a read might
result into data corruption (see CASSANDRA-13004 for more details).
Fixing this bug required a messaging protocol version bump. By default,
http://git-wip-us.apache.org/repos/asf/cassandra/blob/425880ff/src/java/org/apache/cassandra/cql3/statements/CreateViewStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateViewStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateViewStatement.java
index 668f791..8a8fc17 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateViewStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateViewStatement.java
@@ -19,6 +19,7 @@
package org.apache.cassandra.cql3.statements;
import java.util.*;
+import java.util.stream.Collectors;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
@@ -210,6 +211,20 @@ public class CreateViewStatement extends SchemaAlteringStatement
if (!prepared.boundNames.isEmpty())
throw new InvalidRequestException("Cannot use query parameters in CREATE MATERIALIZED VIEW statements");
+ // SEE CASSANDRA-13798, use it if the use case is append-only.
+ final boolean allowFilteringNonKeyColumns = Boolean.parseBoolean(System.getProperty("cassandra.mv.allow_filtering_nonkey_columns_unsafe",
+ "false"));
+ if (!restrictions.nonPKRestrictedColumns(false).isEmpty() && !allowFilteringNonKeyColumns)
+ {
+ throw new InvalidRequestException(
+ String.format("Non-primary key columns cannot be restricted in the SELECT statement used"
+ + " for materialized view creation (got restrictions on: %s)",
+ restrictions.nonPKRestrictedColumns(false)
+ .stream()
+ .map(def -> def.name.toString())
+ .collect(Collectors.joining(", "))));
+ }
+
String whereClauseText = View.relationsToWhereClause(whereClause.relations);
Set<ColumnIdentifier> basePrimaryKeyCols = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/425880ff/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java b/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java
index cc8bfe9..87b19ad 100644
--- a/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java
+++ b/test/unit/org/apache/cassandra/cql3/ViewFilteringTest.java
@@ -21,6 +21,7 @@ package org.apache.cassandra.cql3;
import java.util.*;
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -48,7 +49,15 @@ public class ViewFilteringTest extends CQLTester
public static void startup()
{
requireNetwork();
+ System.setProperty("cassandra.mv.allow_filtering_nonkey_columns_unsafe", "true");
}
+
+ @AfterClass
+ public static void TearDown()
+ {
+ System.setProperty("cassandra.mv.allow_filtering_nonkey_columns_unsafe", "false");
+ }
+
@Before
public void begin()
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/425880ff/test/unit/org/apache/cassandra/cql3/ViewSchemaTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/ViewSchemaTest.java b/test/unit/org/apache/cassandra/cql3/ViewSchemaTest.java
index 86e00dc..c83d96d 100644
--- a/test/unit/org/apache/cassandra/cql3/ViewSchemaTest.java
+++ b/test/unit/org/apache/cassandra/cql3/ViewSchemaTest.java
@@ -684,4 +684,19 @@ public class ViewSchemaTest extends CQLTester
Assert.assertEquals("Cannot use DROP TABLE on Materialized View", e.getMessage());
}
}
+
+ @Test
+ public void testCreateMVWithFilteringOnNonPkColumn() throws Throwable
+ {
+ // SEE CASSANDRA-13798, we cannot properly support non-pk base column filtering for mv without huge storage
+ // format changes.
+ createTable("CREATE TABLE %s ( a int, b int, c int, d int, PRIMARY KEY (a, b, c))");
+
+ executeNet(protocolVersion, "USE " + keyspace());
+
+ assertInvalidMessage("Non-primary key columns cannot be restricted in the SELECT statement used for materialized view creation",
+ "CREATE MATERIALIZED VIEW " + keyspace() + ".mv AS SELECT * FROM %s "
+ + "WHERE b IS NOT NULL AND c IS NOT NULL AND a IS NOT NULL "
+ + "AND d = 1 PRIMARY KEY (c, b, a)");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org