This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch cassandra-6.0 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit b944c019c286d06d4bc0a4826b38dfded0863cb2 Author: Marcus Eriksson <[email protected]> AuthorDate: Thu Sep 3 14:42:11 2026 +0200 Don't fail host specific repairs against system_cluster_metadata Patch by marcuse; reviewed by Sam Tunnicliffe for CASSANDRA-21651 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/repair/RepairCoordinator.java | 8 +++++++- .../test/log/RepairSystemClusterMetadataTest.java | 13 +++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index dcb7243657..2ea5846d1d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 6.0-alpha3 + * Don't fail host specific repairs against system_cluster_metadata (CASSANDRA-21651) * During major upgrade, if a node has replacement arguments it attempts to bootstrap even if already bootstrapped (CASSANDRA-21634) * Node with empty data directory is allowed to rejoin the ring on the second start after the first start is correctly rejected (CASSANDRA-21633) * Megamorphic call in ClusteringPrefix.Deserializer.deserializeOne slows down reads (CASSANDRA-21587) diff --git a/src/java/org/apache/cassandra/repair/RepairCoordinator.java b/src/java/org/apache/cassandra/repair/RepairCoordinator.java index 8aa3482b5e..99bce6a193 100644 --- a/src/java/org/apache/cassandra/repair/RepairCoordinator.java +++ b/src/java/org/apache/cassandra/repair/RepairCoordinator.java @@ -407,9 +407,15 @@ public class RepairCoordinator implements Runnable, ProgressEventNotifier, Repai EndpointsForRange allForRange = ctx.repair().getNeighbors(state.keyspace, keyspaceLocalRanges, range); allNeighbors.addAll(allForRange.endpoints()); + Collection<String> specificHosts = Sets.newHashSet(state.options.getHosts()); + if (isCMS && isMeta && !specificHosts.isEmpty()) + { + logger.info("{} Repair requested with specific hosts {} for {} - repairing the full CMS instead", state.id, specificHosts, state.keyspace); + specificHosts.clear(); + } EndpointsForRange includeForRange = ctx.repair().filterNeighbors(allForRange, range, state.options.getDataCenters(), - state.options.getHosts()); + specificHosts); if (includeForRange.isEmpty()) { diff --git a/test/distributed/org/apache/cassandra/distributed/test/log/RepairSystemClusterMetadataTest.java b/test/distributed/org/apache/cassandra/distributed/test/log/RepairSystemClusterMetadataTest.java index 178be004fa..0e5d31ca4f 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/log/RepairSystemClusterMetadataTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/log/RepairSystemClusterMetadataTest.java @@ -19,6 +19,7 @@ package org.apache.cassandra.distributed.test.log; import java.io.IOException; +import java.util.concurrent.ExecutionException; import org.junit.Test; @@ -38,4 +39,16 @@ public class RepairSystemClusterMetadataTest extends TestBaseImpl cluster.get(4).nodetoolResult("repair", "-force", "-st", "-1", "-et", "3074457345618258601", "system_cluster_metadata").asserts().success(); } } + + @Test + public void testHostTargetedRepair() throws IOException, ExecutionException, InterruptedException + { + try (Cluster cluster = init(builder().withNodes(6).withConfig(c -> c.with(Feature.NETWORK, Feature.GOSSIP)) + .start())) + { + cluster.get(1).nodetoolResult("cms", "reconfigure", "3").asserts().success(); + cluster.get(2).shutdown().get(); + cluster.get(3).nodetoolResult("repair", "-force", "-hosts", "127.0.0.3", "-hosts", "127.0.0.4", "system_cluster_metadata").asserts().success(); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
