diff --git a/CHANGES.txt b/CHANGES.txt index 24b68b6a03..7e397c1f4c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -64,6 +64,7 @@ * Add the ability to disable bulk loading of SSTables (CASSANDRA-18781) * Clean up obsolete functions and simplify cql_version handling in cqlsh (CASSANDRA-18787) Merged from 5.0: + * Deprecate and ignore use_deterministic_table_id (CASSANDRA-19809) * Prioritize built indexes in IndexStatusManager (CASSANDRA-19400) * Add java.base/java.lang.reflect among opens for jvm11-client.options (CASSANDRA-19780) * Move bcpkix-jdk18on to build dependencies, update to 1.78 and explicitly enumerate transitive dependencies (CASSANDRA-19739) diff --git a/NEWS.txt b/NEWS.txt index 202290c574..8d9e620801 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -153,6 +153,7 @@ Upgrading Deprecation ----------- + - `use_deterministic_table_id` is no longer supported and should be removed from cassandra.yaml. Table IDs may still be supplied explicitly on CREATE. 5.0 @@ -365,6 +366,7 @@ Deprecation in a future release. A single native port can be used for both encrypted and unencrypted traffic; see CASSANDRA-10559. Cluster hosts running with dual native ports were not correctly identified in the system.peers tables and server-sent EVENTs, causing clients that encrypt traffic to fail to maintain correct connection pools. For more information, see CASSANDRA-19392. + - Deprecated `use_deterministic_table_id` in cassandra.yaml. Table IDs may still be supplied explicitly on CREATE. 4.1 === diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java index e053e02031..2330f91b58 100644 --- a/src/java/org/apache/cassandra/config/Config.java +++ b/src/java/org/apache/cassandra/config/Config.java @@ -124,6 +124,7 @@ public class Config public DiskFailurePolicy disk_failure_policy = DiskFailurePolicy.ignore; public CommitFailurePolicy commit_failure_policy = CommitFailurePolicy.stop; + @Deprecated(since = "5.0.1") public volatile boolean use_deterministic_table_id = false; /* initial token in the ring */ diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index fa1b65c8bf..69d46da2fc 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -1009,6 +1009,8 @@ public class DatabaseDescriptor conf.native_transport_min_backoff_on_queue_overload, conf.native_transport_max_backoff_on_queue_overload)); + if (conf.use_deterministic_table_id) + logger.warn("use_deterministic_table_id is no longer supported and should be removed from cassandra.yaml."); } @VisibleForTesting @@ -3477,16 +3479,6 @@ public class DatabaseDescriptor return conf.hinted_handoff_disabled_datacenters; } - public static boolean useDeterministicTableID() - { - return conf != null && conf.use_deterministic_table_id; - } - - public static void useDeterministicTableID(boolean value) - { - conf.use_deterministic_table_id = value; - } - public static void enableHintsForDC(String dc) { conf.hinted_handoff_disabled_datacenters.remove(dc); diff --git a/src/java/org/apache/cassandra/cql3/statements/schema/CreateTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/schema/CreateTableStatement.java index 59c7046223..7c705f7fee 100644 --- a/src/java/org/apache/cassandra/cql3/statements/schema/CreateTableStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/schema/CreateTableStatement.java @@ -31,7 +31,6 @@ import org.apache.cassandra.audit.AuditLogEntryType; import org.apache.cassandra.auth.DataResource; import org.apache.cassandra.auth.IResource; import org.apache.cassandra.auth.Permission; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.*; import org.apache.cassandra.cql3.functions.masking.ColumnMask; import org.apache.cassandra.db.guardrails.Guardrails; @@ -127,7 +126,7 @@ public final class CreateTableStatement extends AlterSchemaStatement // We do not want to set table ID here just yet, since we are using CQL for serialising a fully expanded CREATE TABLE statement. this.expandedCql = builder.build().toCqlString(false, attrs.hasProperty(TableAttributes.ID), ifNotExists); - if (!attrs.hasProperty(TableAttributes.ID) && !DatabaseDescriptor.useDeterministicTableID()) + if (!attrs.hasProperty(TableAttributes.ID)) builder.id(TableId.get(metadata)); TableMetadata table = builder.build(); table.validate(); diff --git a/src/java/org/apache/cassandra/cql3/statements/schema/CreateViewStatement.java b/src/java/org/apache/cassandra/cql3/statements/schema/CreateViewStatement.java index a4a8ddcfbe..f6c8135bb1 100644 --- a/src/java/org/apache/cassandra/cql3/statements/schema/CreateViewStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/schema/CreateViewStatement.java @@ -327,7 +327,7 @@ public final class CreateViewStatement extends AlterSchemaStatement if (attrs.hasProperty(TableAttributes.ID)) builder.id(attrs.getId()); - else if (!builder.hasId() && !DatabaseDescriptor.useDeterministicTableID()) + else if (!builder.hasId()) builder.id(TableId.get(metadata)); builder.params(attrs.asNewTableParams()) diff --git a/src/java/org/apache/cassandra/schema/TableMetadata.java b/src/java/org/apache/cassandra/schema/TableMetadata.java index 5e2ab4b79c..889264d43f 100644 --- a/src/java/org/apache/cassandra/schema/TableMetadata.java +++ b/src/java/org/apache/cassandra/schema/TableMetadata.java @@ -829,7 +829,7 @@ public class TableMetadata implements SchemaElement { // make sure vtables use deteriminstic ids so they can be referenced in calls cross-nodes // see CASSANDRA-17295 - if (DatabaseDescriptor.useDeterministicTableID() || kind == Kind.VIRTUAL) + if (kind == Kind.VIRTUAL) id = TableId.unsafeDeterministic(keyspace, name); else id = TableId.generate(); diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/CreateTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/CreateTest.java index 0e881dac2d..82a7d18910 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/CreateTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/CreateTest.java @@ -27,7 +27,6 @@ import java.util.UUID; import org.junit.Assert; import org.junit.Test; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.cql3.Duration; import org.apache.cassandra.db.Mutation; @@ -62,6 +61,7 @@ import static org.apache.cassandra.cql3.Duration.NANOS_PER_MINUTE; import static org.apache.cassandra.tcm.membership.MembershipUtils.endpoint; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -725,24 +725,11 @@ public class CreateTest extends CQLTester } @Test - public void testUsingDeterministicTableID() + public void testNotUsingDeterministicTableIDOnCreate() { - DatabaseDescriptor.useDeterministicTableID(true); - createTable("CREATE TABLE %s (id text PRIMARY KEY);"); TableMetadata tmd = currentTableMetadata(); - assertEquals(TableId.unsafeDeterministic(tmd.keyspace, tmd.name), tmd.id); - - } - - @Test - public void testNotUsingDeterministicTableIDWhenDisabled() - { - DatabaseDescriptor.useDeterministicTableID(false); - - createTable("CREATE TABLE %s (id text PRIMARY KEY);"); - TableMetadata tmd = currentTableMetadata(); - assertFalse(TableId.unsafeDeterministic(tmd.keyspace, tmd.name).equals(tmd.id)); + assertNotEquals(TableId.unsafeDeterministic(tmd.keyspace, tmd.name), tmd.id); } private void assertThrowsConfigurationException(String errorMsg, String createStmt)