From e94d86b1e5cd0ec73ac3bfdae75782e12cae840f Mon Sep 17 00:00:00 2001 From: David Capwell Date: Wed, 2 Oct 2024 14:54:29 -0700 Subject: [PATCH] TopologyMixupTestBase does not fix replication factor for Keyspaces after reaching rf=3 patch by David Capwell; reviewed by Alex Petrov for CASSANDRA-19975 --- modules/accord | 2 +- src/java/org/apache/cassandra/schema/DistributedSchema.java | 6 ++++++ .../BeginConsensusMigrationForTableAndRange.java | 3 +-- .../MaybeFinishConsensusMigrationForTableAndRange.java | 3 +-- .../cassandra/fuzz/topology/AccordTopologyMixupTest.java | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/accord b/modules/accord index d914ee6981..25f23ffec4 160000 --- a/modules/accord +++ b/modules/accord @@ -1 +1 @@ -Subproject commit d914ee69816ebfdf88b2120ff1d8e0bc16edecbc +Subproject commit 25f23ffec439a921387ca249908798b9cc7d4620 diff --git a/src/java/org/apache/cassandra/schema/DistributedSchema.java b/src/java/org/apache/cassandra/schema/DistributedSchema.java index e0658739c2..b13cfc7db3 100644 --- a/src/java/org/apache/cassandra/schema/DistributedSchema.java +++ b/src/java/org/apache/cassandra/schema/DistributedSchema.java @@ -140,6 +140,12 @@ public class DistributedSchema implements MetadataValue return tables.get(id); } + public TableMetadata getTableMetadata(String keyspace, String cf) + { + KeyspaceMetadata ks = keyspaces.getNullable(keyspace); + return ks == null ? null : ks.tables.getNullable(cf); + } + public static DistributedSchema fromSystemTables(Keyspaces keyspaces, Set knownDatacenters) { if (!keyspaces.containsKeyspace(SchemaConstants.METADATA_KEYSPACE_NAME)) diff --git a/src/java/org/apache/cassandra/tcm/transformations/BeginConsensusMigrationForTableAndRange.java b/src/java/org/apache/cassandra/tcm/transformations/BeginConsensusMigrationForTableAndRange.java index e74a18c81f..59379852cc 100644 --- a/src/java/org/apache/cassandra/tcm/transformations/BeginConsensusMigrationForTableAndRange.java +++ b/src/java/org/apache/cassandra/tcm/transformations/BeginConsensusMigrationForTableAndRange.java @@ -29,7 +29,6 @@ import org.apache.cassandra.dht.Range; import org.apache.cassandra.dht.Token; import org.apache.cassandra.io.util.DataInputPlus; import org.apache.cassandra.io.util.DataOutputPlus; -import org.apache.cassandra.schema.Schema; import org.apache.cassandra.schema.TableId; import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.service.consensus.migration.ConsensusMigrationTarget; @@ -83,7 +82,7 @@ public class BeginConsensusMigrationForTableAndRange implements Transformation public Result execute(ClusterMetadata prev) { Transformer transformer = prev.transformer(); - Collection metadata = tables.stream().map(Schema.instance::getTableMetadata).collect(Collectors.toList()); + Collection metadata = tables.stream().map(prev.schema::getTableMetadata).collect(Collectors.toList()); ConsensusMigrationState consensusMigrationState = prev.consensusMigrationState.withRangesMigrating(metadata, ranges, false); return Transformation.success(transformer.with(consensusMigrationState), LockedRanges.AffectedRanges.EMPTY); } diff --git a/src/java/org/apache/cassandra/tcm/transformations/MaybeFinishConsensusMigrationForTableAndRange.java b/src/java/org/apache/cassandra/tcm/transformations/MaybeFinishConsensusMigrationForTableAndRange.java index 15bfdda65c..16ff97e674 100644 --- a/src/java/org/apache/cassandra/tcm/transformations/MaybeFinishConsensusMigrationForTableAndRange.java +++ b/src/java/org/apache/cassandra/tcm/transformations/MaybeFinishConsensusMigrationForTableAndRange.java @@ -33,7 +33,6 @@ import org.apache.cassandra.io.util.DataOutputPlus; import org.apache.cassandra.schema.DistributedSchema; import org.apache.cassandra.schema.KeyspaceMetadata; import org.apache.cassandra.schema.Keyspaces; -import org.apache.cassandra.schema.Schema; import org.apache.cassandra.schema.TableId; import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.schema.TableParams; @@ -134,7 +133,7 @@ public class MaybeFinishConsensusMigrationForTableAndRange implements Transforma logger.info("Completed repair eligibiliy '{}' paxos repaired ranges {}, accord repaired ranges {}", repairType, paxosRepairedRanges, accordBarrieredRanges); checkNotNull(metadata, "clusterMetadata should not be null"); String ksAndCF = keyspace + "." + cf; - TableMetadata tbm = Schema.instance.getTableMetadata(keyspace, cf); + TableMetadata tbm = metadata.schema.getTableMetadata(keyspace, cf); if (tbm == null) return new Rejected(INVALID, format("Table %s is not currently performing consensus migration", ksAndCF)); diff --git a/test/distributed/org/apache/cassandra/fuzz/topology/AccordTopologyMixupTest.java b/test/distributed/org/apache/cassandra/fuzz/topology/AccordTopologyMixupTest.java index b077479696..fd9dbd4bc3 100644 --- a/test/distributed/org/apache/cassandra/fuzz/topology/AccordTopologyMixupTest.java +++ b/test/distributed/org/apache/cassandra/fuzz/topology/AccordTopologyMixupTest.java @@ -124,7 +124,7 @@ public class AccordTopologyMixupTest extends TopologyMixupTestBase, Command, Void, ?>> cqlOperations(Spec spec) { Gen select = (Gen) (Gen) fromQT(new ASTGenerators.SelectGenBuilder(spec.metadata).withLimit1().build()); - Gen mutation = (Gen) (Gen) fromQT(new ASTGenerators.MutationGenBuilder(spec.metadata).withoutTimestamp().build()); + Gen mutation = (Gen) (Gen) fromQT(new ASTGenerators.MutationGenBuilder(spec.metadata).withoutTimestamp().withoutTtl().build()); Gen txn = (Gen) (Gen) fromQT(new ASTGenerators.TxnGenBuilder(spec.metadata).build()); Map, Integer> operations = new LinkedHashMap<>(); operations.put(select, 1);