From 730bb7e1d577508b9790edb97eeafe5087fb0b06 Mon Sep 17 00:00:00 2001 From: Sam Tunnicliffe Date: Fri, 3 Jul 2026 14:56:19 +0100 Subject: [PATCH] Actually make ClusterMetadata.placements private --- src/java/org/apache/cassandra/hints/HintsDispatcher.java | 2 +- .../cassandra/service/accord/topology/AccordTopology.java | 2 +- src/java/org/apache/cassandra/tcm/ClusterMetadata.java | 2 +- src/java/org/apache/cassandra/tcm/MetadataKeys.java | 2 +- .../cassandra/tcm/transformations/AccordMarkStale.java | 2 +- src/java/org/apache/cassandra/tools/CMSOfflineTool.java | 2 +- .../cassandra/service/accord/AccordTopologyUtils.java | 2 +- .../org/apache/cassandra/service/accord/EpochSyncTest.java | 6 +++--- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/java/org/apache/cassandra/hints/HintsDispatcher.java b/src/java/org/apache/cassandra/hints/HintsDispatcher.java index 3ba38bdeaf..025d52579b 100644 --- a/src/java/org/apache/cassandra/hints/HintsDispatcher.java +++ b/src/java/org/apache/cassandra/hints/HintsDispatcher.java @@ -276,7 +276,7 @@ final class HintsDispatcher implements AutoCloseable // Also may need to apply locally because it's possible this is from the batchlog // and we never applied it locally // TODO (review): Additional error handling necessary? Hints are lossy - DataPlacement dataPlacement = cm.placements.get(cm.schema.getKeyspace(mutation.getKeyspaceName()).getMetadata().params.replication); + DataPlacement dataPlacement = cm.placement(cm.schema.getKeyspace(mutation.getKeyspaceName()).getMetadata().params.replication); VersionedEndpoints.ForToken forToken = dataPlacement.writes.forToken(mutation.key().getToken()); Replica self = forToken.get().selfIfPresent(); if (self != null) diff --git a/src/java/org/apache/cassandra/service/accord/topology/AccordTopology.java b/src/java/org/apache/cassandra/service/accord/topology/AccordTopology.java index c5298c0164..9c713abcbb 100644 --- a/src/java/org/apache/cassandra/service/accord/topology/AccordTopology.java +++ b/src/java/org/apache/cassandra/service/accord/topology/AccordTopology.java @@ -312,7 +312,7 @@ public class AccordTopology public static Topology createAccordTopology(ClusterMetadata metadata, ShardLookup lookup) { - return createAccordTopology(metadata.epoch, metadata.schema, metadata.placements, metadata.directory, metadata.accordFastPath, lookup, metadata.accordStaleReplicas); + return createAccordTopology(metadata.epoch, metadata.schema, metadata.placements(), metadata.directory, metadata.accordFastPath, lookup, metadata.accordStaleReplicas); } public static Topology createAccordTopology(ClusterMetadata metadata, Topology current) diff --git a/src/java/org/apache/cassandra/tcm/ClusterMetadata.java b/src/java/org/apache/cassandra/tcm/ClusterMetadata.java index 4110e80801..0224ca5bfb 100644 --- a/src/java/org/apache/cassandra/tcm/ClusterMetadata.java +++ b/src/java/org/apache/cassandra/tcm/ClusterMetadata.java @@ -109,7 +109,7 @@ public class ClusterMetadata public final DistributedSchema schema; public final Directory directory; public final TokenMap tokenMap; - public final DataPlacements placements; + private final DataPlacements placements; public final AccordFastPath accordFastPath; public final LockedRanges lockedRanges; public final InProgressSequences inProgressSequences; diff --git a/src/java/org/apache/cassandra/tcm/MetadataKeys.java b/src/java/org/apache/cassandra/tcm/MetadataKeys.java index 8188d03e14..f788f1a449 100644 --- a/src/java/org/apache/cassandra/tcm/MetadataKeys.java +++ b/src/java/org/apache/cassandra/tcm/MetadataKeys.java @@ -52,7 +52,7 @@ public class MetadataKeys .put(SCHEMA, cm -> cm.schema) .put(NODE_DIRECTORY, cm -> cm.directory) .put(TOKEN_MAP, cm -> cm.tokenMap) - .put(DATA_PLACEMENTS, cm -> cm.placements) + .put(DATA_PLACEMENTS, ClusterMetadata::placements) .put(LOCKED_RANGES, cm -> cm.lockedRanges) .put(IN_PROGRESS_SEQUENCES, cm -> cm.inProgressSequences) .put(ACCORD_FAST_PATH, cm -> cm.accordFastPath) diff --git a/src/java/org/apache/cassandra/tcm/transformations/AccordMarkStale.java b/src/java/org/apache/cassandra/tcm/transformations/AccordMarkStale.java index 1e3aef5817..491a3a2118 100644 --- a/src/java/org/apache/cassandra/tcm/transformations/AccordMarkStale.java +++ b/src/java/org/apache/cassandra/tcm/transformations/AccordMarkStale.java @@ -78,7 +78,7 @@ public class AccordMarkStale implements Transformation for (KeyspaceMetadata keyspace : prev.schema.getKeyspaces().without(SchemaConstants.REPLICATED_SYSTEM_KEYSPACE_NAMES)) { - List shards = AccordTopology.KeyspaceShard.forKeyspace(keyspace, prev.placements, prev.directory); + List shards = AccordTopology.KeyspaceShard.forKeyspace(keyspace, prev.placements(), prev.directory); for (AccordTopology.KeyspaceShard shard : shards) { diff --git a/src/java/org/apache/cassandra/tools/CMSOfflineTool.java b/src/java/org/apache/cassandra/tools/CMSOfflineTool.java index b2c87931e6..d42c91955b 100644 --- a/src/java/org/apache/cassandra/tools/CMSOfflineTool.java +++ b/src/java/org/apache/cassandra/tools/CMSOfflineTool.java @@ -772,7 +772,7 @@ public class CMSOfflineTool implements Runnable throw new IllegalArgumentException("Keyspace " + keyspace + " not found in cluster metadata."); } - DataPlacement placement = metadata.placements.get(keyspaceMetadata.params.replication); + DataPlacement placement = metadata.placement(keyspaceMetadata.params.replication); List rows = new ArrayList<>(); rows.addAll(replicaGroupsToRows(placement.reads, "read")); rows.addAll(replicaGroupsToRows(placement.writes, "write")); diff --git a/test/unit/org/apache/cassandra/service/accord/AccordTopologyUtils.java b/test/unit/org/apache/cassandra/service/accord/AccordTopologyUtils.java index 8b6b9ddb3c..22a62ac84c 100644 --- a/test/unit/org/apache/cassandra/service/accord/AccordTopologyUtils.java +++ b/test/unit/org/apache/cassandra/service/accord/AccordTopologyUtils.java @@ -105,7 +105,7 @@ public class AccordTopologyUtils { ReplicationParams replication = keyspace.params.replication; AbstractReplicationStrategy strategy = AbstractReplicationStrategy.createReplicationStrategy(keyspace.name, replication); - DataPlacements.Builder placements = metadata.placements.unbuild(); + DataPlacements.Builder placements = metadata.placements().unbuild(); DataPlacement placement = strategy.calculateDataPlacement(Epoch.EMPTY, metadata.tokenMap.toRanges(), metadata); placements.with(replication, placement); metadata = transformer.with(placements.build()).build().metadata; diff --git a/test/unit/org/apache/cassandra/service/accord/EpochSyncTest.java b/test/unit/org/apache/cassandra/service/accord/EpochSyncTest.java index 5ca0272c6e..0c43c74ea8 100644 --- a/test/unit/org/apache/cassandra/service/accord/EpochSyncTest.java +++ b/test/unit/org/apache/cassandra/service/accord/EpochSyncTest.java @@ -344,7 +344,7 @@ public class EpochSyncTest private static boolean joined(ClusterMetadata metadata, Node.Id id) { NodeAddresses address = metadata.directory.getNodeAddresses(new NodeId(id.id)); - return metadata.placements.get(replication_params).reads.byEndpoint().keySet().contains(address.broadcastAddress); + return metadata.placement(replication_params).reads.byEndpoint().keySet().contains(address.broadcastAddress); } public enum EpochTracker { topologyManager, accordSyncPropagator } @@ -615,7 +615,7 @@ public class EpochSyncTest { Topology t = AccordTopology.createAccordTopology(current); Ranges ranges = t.ranges().mergeTouching(); - if (!current.placements.get(replication_params).reads.isEmpty()) + if (!current.placement(replication_params).reads.isEmpty()) Assertions.assertThat(ranges).hasSize(1); cms.setMetadata(current); for (Node.Id id : status(s -> s != Status.Removed)) @@ -721,7 +721,7 @@ public class EpochSyncTest case Registered: Invariants.require(!t.nodes().contains(id), "Node was in Init state but present in the Topology!"); Invariants.require(current.directory.peerId(address(id)) != null, "Node exists but not in TCM"); - if (current.placements.get(replication_params).writes.byEndpoint().keySet().contains(address(id))) + if (current.placement(replication_params).writes.byEndpoint().keySet().contains(address(id))) status = Status.Joining; break; case Joining: