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]

Reply via email to