From 8f4ae7d825d90a18327c5555386f3cdaf414d836 Mon Sep 17 00:00:00 2001 From: Bereng Date: Thu, 16 Sep 2021 09:03:27 +0200 Subject: [PATCH] Improve MV TTL error message patch by Brandon Williams, Berenguer Blasi; reviewed by Brandon Williams, Benjamin Lerer, Aleksei Zotov for CASSANDRA-16960 Co-authored-by: Brandon Williams Co-authored-by: Berenguer Blasi --- .../cassandra/cql3/statements/AlterViewStatement.java | 5 +++-- test/unit/org/apache/cassandra/cql3/ViewTest.java | 9 ++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/java/org/apache/cassandra/cql3/statements/AlterViewStatement.java b/src/java/org/apache/cassandra/cql3/statements/AlterViewStatement.java index ea87cfdc25..91c54629a6 100644 --- a/src/java/org/apache/cassandra/cql3/statements/AlterViewStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/AlterViewStatement.java @@ -79,9 +79,10 @@ public class AlterViewStatement extends SchemaAlteringStatement if (params.defaultTimeToLive > 0) { - throw new InvalidRequestException("Cannot set or alter default_time_to_live for a materialized view. " + + throw new InvalidRequestException("Forbidden default_time_to_live detected for a materialized view. " + "Data in a materialized view always expire at the same time than " + - "the corresponding data in the parent table."); + "the corresponding data in the parent table. default_time_to_live " + + "must be set to zero, see CASSANDRA-12868 for more information"); } viewCopy.metadata.params(params); diff --git a/test/unit/org/apache/cassandra/cql3/ViewTest.java b/test/unit/org/apache/cassandra/cql3/ViewTest.java index db742f7b72..6dd6a850b7 100644 --- a/test/unit/org/apache/cassandra/cql3/ViewTest.java +++ b/test/unit/org/apache/cassandra/cql3/ViewTest.java @@ -1380,16 +1380,23 @@ public class ViewTest extends CQLTester "c int, " + "val int) WITH default_time_to_live = 60"); + execute("USE " + keyspace()); + executeNet(protocolVersion, "USE " + keyspace()); + createView("mv_ttl2", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE k IS NOT NULL AND c IS NOT NULL PRIMARY KEY (k,c)"); // Must NOT include "default_time_to_live" on alter Materialized View try { - executeNet(protocolVersion, "ALTER MATERIALIZED VIEW %s WITH default_time_to_live = 30"); + executeNet(protocolVersion, "ALTER MATERIALIZED VIEW " + keyspace() + ".mv_ttl2 WITH default_time_to_live = 30"); fail("Should fail if TTL is provided while altering materialized view"); } catch (Exception e) { + // Make sure the message is clear. See CASSANDRA-16960 + assertEquals("Forbidden default_time_to_live detected for a materialized view. Data in a materialized view always expire at the same time than the corresponding " + + "data in the parent table. default_time_to_live must be set to zero, see CASSANDRA-12868 for more information", + e.getMessage()); } }