This is an automated email from the ASF dual-hosted git repository.

smiklosovic pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 3acec3c28e Make nodetool reconfigurecms sync by default and add 
--cancel to be able to cancel ongoing reconfigurations
3acec3c28e is described below

commit 3acec3c28e56239147d9fb4bd821a49f4b86a77a
Author: Marcus Eriksson <[email protected]>
AuthorDate: Thu Dec 21 12:22:59 2023 +0100

    Make nodetool reconfigurecms sync by default and add --cancel to be able to 
cancel ongoing reconfigurations
    
    patch by Marcus Eriksson; reviewed by Stefan Miklosovic, Sam Tunnicliffe 
for CASSANDRA-19216
    
    Co-authored-by: Sam Tunnicliffe <[email protected]>
---
 CHANGES.txt                                        |  1 +
 .../org/apache/cassandra/tcm/CMSOperations.java    | 50 +++++++++----------
 .../apache/cassandra/tcm/CMSOperationsMBean.java   |  5 +-
 .../cassandra/tcm/ownership/DataPlacements.java    |  6 +++
 .../tcm/sequences/CancelCMSReconfiguration.java    | 56 ++++++++++++++++++----
 .../cassandra/tcm/sequences/ReconfigureCMS.java    | 16 +++++++
 .../cassandra/tools/nodetool/ReconfigureCMS.java   | 18 ++++---
 .../distributed/test/log/ReconfigureCMSTest.java   | 25 +++++-----
 .../test/log/TriggeredReconfigureCMSTest.java      |  6 +--
 .../upgrade/ClusterMetadataUpgradeHarryTest.java   |  2 +-
 .../upgrade/ClusterMetadataUpgradeTest.java        |  2 +-
 11 files changed, 129 insertions(+), 58 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index f36529a350..d73539808e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 5.1
+ * Make nodetool reconfigurecms sync by default and add --cancel to be able to 
cancel ongoing reconfigurations (CASSANDRA-19216)
  * Expose auth mode in system_views.clients, nodetool clientstats, metrics 
(CASSANDRA-19366)
  * Remove sealed_periods and last_sealed_period tables (CASSANDRA-19189)
  * Improve setup and initialisation of LocalLog/LogSpec (CASSANDRA-19271)
diff --git a/src/java/org/apache/cassandra/tcm/CMSOperations.java 
b/src/java/org/apache/cassandra/tcm/CMSOperations.java
index 6aaccf7f83..8eacd53873 100644
--- a/src/java/org/apache/cassandra/tcm/CMSOperations.java
+++ b/src/java/org/apache/cassandra/tcm/CMSOperations.java
@@ -29,10 +29,10 @@ import java.util.stream.Collectors;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.cassandra.concurrent.ScheduledExecutors;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.schema.ReplicationParams;
 import org.apache.cassandra.tcm.membership.NodeVersion;
+import org.apache.cassandra.tcm.sequences.CancelCMSReconfiguration;
 import org.apache.cassandra.tcm.sequences.InProgressSequences;
 import org.apache.cassandra.tcm.sequences.ReconfigureCMS;
 import org.apache.cassandra.tcm.serialization.Version;
@@ -73,23 +73,21 @@ public class CMSOperations implements CMSOperationsMBean
 
 
     @Override
-    public void reconfigureCMS(int rf, boolean sync)
+    public void reconfigureCMS(int rf)
     {
-        Runnable r = () -> cms.reconfigureCMS(ReplicationParams.simpleMeta(rf, 
ClusterMetadata.current().directory.knownDatacenters()));
-        if (sync)
-            r.run();
-        else
-            ScheduledExecutors.nonPeriodicTasks.submit(r);
+        cms.reconfigureCMS(ReplicationParams.simpleMeta(rf, 
ClusterMetadata.current().directory.knownDatacenters()));
     }
 
     @Override
-    public void reconfigureCMS(Map<String, Integer> rf, boolean sync)
+    public void reconfigureCMS(Map<String, Integer> rf)
     {
-        Runnable r = () -> 
ClusterMetadataService.instance().reconfigureCMS(ReplicationParams.ntsMeta(rf));
-        if (sync)
-            r.run();
-        else
-            ScheduledExecutors.nonPeriodicTasks.submit(r);
+        cms.reconfigureCMS(ReplicationParams.ntsMeta(rf));
+    }
+
+    @Override
+    public void cancelReconfigureCms()
+    {
+        cms.commit(CancelCMSReconfiguration.instance);
     }
 
     @Override
@@ -117,6 +115,9 @@ public class CMSOperations implements CMSOperationsMBean
                                                         .map(Object::toString)
                                                         
.collect(Collectors.toList()));
 
+        if (advance.diff.removals.isEmpty() && 
advance.diff.additions.isEmpty())
+            status.put("INCOMPLETE", Collections.singletonList("All operations 
have finished but metadata keyspace ranges are still locked"));
+
         return status;
     }
 
@@ -125,15 +126,14 @@ public class CMSOperations implements CMSOperationsMBean
     {
         Map<String, String> info = new HashMap<>();
         ClusterMetadata metadata = ClusterMetadata.current();
-        ClusterMetadataService service = ClusterMetadataService.instance();
         String members = 
metadata.fullCMSMembers().stream().sorted().map(Object::toString).collect(Collectors.joining(","));
         info.put("MEMBERS", members);
-        info.put("IS_MEMBER", 
Boolean.toString(service.isCurrentMember(FBUtilities.getBroadcastAddressAndPort())));
+        info.put("IS_MEMBER", 
Boolean.toString(cms.isCurrentMember(FBUtilities.getBroadcastAddressAndPort())));
         info.put("SERVICE_STATE", 
ClusterMetadataService.state(metadata).toString());
-        info.put("IS_MIGRATING", Boolean.toString(service.isMigrating()));
+        info.put("IS_MIGRATING", Boolean.toString(cms.isMigrating()));
         info.put("EPOCH", Long.toString(metadata.epoch.getEpoch()));
-        info.put("LOCAL_PENDING", 
Integer.toString(ClusterMetadataService.instance().log().pendingBufferSize()));
-        info.put("COMMITS_PAUSED", Boolean.toString(service.commitsPaused()));
+        info.put("LOCAL_PENDING", 
Integer.toString(cms.log().pendingBufferSize()));
+        info.put("COMMITS_PAUSED", Boolean.toString(cms.commitsPaused()));
         info.put("REPLICATION_FACTOR", 
ReplicationParams.meta(metadata).toString());
         return info;
     }
@@ -142,7 +142,7 @@ public class CMSOperations implements CMSOperationsMBean
     public void sealPeriod()
     {
         logger.info("Sealing current period in metadata log");
-        long period = ClusterMetadataService.instance().sealPeriod().period;
+        long period = cms.sealPeriod().period;
         logger.info("Current period {} is sealed", period);
     }
 
@@ -151,13 +151,13 @@ public class CMSOperations implements CMSOperationsMBean
     {
         if (!DatabaseDescriptor.getUnsafeTCMMode())
             throw new IllegalStateException("Cluster is not running unsafe TCM 
mode, can't revert epoch");
-        ClusterMetadataService.instance().revertToEpoch(Epoch.create(epoch));
+        cms.revertToEpoch(Epoch.create(epoch));
     }
 
     @Override
     public String dumpClusterMetadata(long epoch, long transformToEpoch, 
String version) throws IOException
     {
-        return 
ClusterMetadataService.instance().dumpClusterMetadata(Epoch.create(epoch), 
Epoch.create(transformToEpoch), Version.valueOf(version));
+        return cms.dumpClusterMetadata(Epoch.create(epoch), 
Epoch.create(transformToEpoch), Version.valueOf(version));
     }
 
     @Override
@@ -173,22 +173,22 @@ public class CMSOperations implements CMSOperationsMBean
     {
         if (!DatabaseDescriptor.getUnsafeTCMMode())
             throw new IllegalStateException("Cluster is not running unsafe TCM 
mode, can't load cluster metadata " + file);
-        ClusterMetadataService.instance().loadClusterMetadata(file);
+        cms.loadClusterMetadata(file);
     }
 
     @Override
     public void setCommitsPaused(boolean paused)
     {
         if (paused)
-            ClusterMetadataService.instance().pauseCommits();
+            cms.pauseCommits();
         else
-            ClusterMetadataService.instance().resumeCommits();
+            cms.resumeCommits();
     }
 
     @Override
     public boolean getCommitsPaused()
     {
-        return ClusterMetadataService.instance().commitsPaused();
+        return cms.commitsPaused();
     }
 
     @Override
diff --git a/src/java/org/apache/cassandra/tcm/CMSOperationsMBean.java 
b/src/java/org/apache/cassandra/tcm/CMSOperationsMBean.java
index 76854a6674..926c09d1d3 100644
--- a/src/java/org/apache/cassandra/tcm/CMSOperationsMBean.java
+++ b/src/java/org/apache/cassandra/tcm/CMSOperationsMBean.java
@@ -26,9 +26,10 @@ public interface CMSOperationsMBean
 {
     public void initializeCMS(List<String> ignore);
     public void resumeReconfigureCms();
-    public void reconfigureCMS(int rf, boolean sync);
-    public void reconfigureCMS(Map<String, Integer> rf, boolean sync);
+    public void reconfigureCMS(int rf);
+    public void reconfigureCMS(Map<String, Integer> rf);
     public Map<String, List<String>> reconfigureCMSStatus();
+    public void cancelReconfigureCms();
 
     public Map<String, String> describeCMS();
     public void sealPeriod();
diff --git a/src/java/org/apache/cassandra/tcm/ownership/DataPlacements.java 
b/src/java/org/apache/cassandra/tcm/ownership/DataPlacements.java
index cd427dbb9e..a59d923591 100644
--- a/src/java/org/apache/cassandra/tcm/ownership/DataPlacements.java
+++ b/src/java/org/apache/cassandra/tcm/ownership/DataPlacements.java
@@ -199,6 +199,12 @@ public class DataPlacements extends 
ReplicationMap<DataPlacement> implements Met
             return this;
         }
 
+        public Builder without(ReplicationParams params)
+        {
+            map.remove(params);
+            return this;
+        }
+
         public DataPlacements build()
         {
             return new DataPlacements(Epoch.EMPTY, map);
diff --git 
a/src/java/org/apache/cassandra/tcm/sequences/CancelCMSReconfiguration.java 
b/src/java/org/apache/cassandra/tcm/sequences/CancelCMSReconfiguration.java
index b8a8b2c6af..723cd3d709 100644
--- a/src/java/org/apache/cassandra/tcm/sequences/CancelCMSReconfiguration.java
+++ b/src/java/org/apache/cassandra/tcm/sequences/CancelCMSReconfiguration.java
@@ -19,16 +19,24 @@
 package org.apache.cassandra.tcm.sequences;
 
 import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.cassandra.exceptions.ExceptionCode;
 import org.apache.cassandra.io.util.DataInputPlus;
 import org.apache.cassandra.io.util.DataOutputPlus;
 import org.apache.cassandra.locator.InetAddressAndPort;
 import org.apache.cassandra.locator.Replica;
+import org.apache.cassandra.schema.DistributedSchema;
+import org.apache.cassandra.schema.KeyspaceMetadata;
+import org.apache.cassandra.schema.KeyspaceParams;
 import org.apache.cassandra.schema.ReplicationParams;
+import org.apache.cassandra.schema.SchemaConstants;
 import org.apache.cassandra.tcm.ClusterMetadata;
 import org.apache.cassandra.tcm.Transformation;
+import org.apache.cassandra.tcm.membership.Directory;
 import org.apache.cassandra.tcm.ownership.DataPlacement;
+import org.apache.cassandra.tcm.ownership.DataPlacements;
 import org.apache.cassandra.tcm.ownership.EntireRange;
 import org.apache.cassandra.tcm.serialization.AsymmetricMetadataSerializer;
 import org.apache.cassandra.tcm.serialization.Version;
@@ -59,27 +67,57 @@ public class CancelCMSReconfiguration implements 
Transformation
 
         ReplicationParams metaParams = ReplicationParams.meta(prev);
         ClusterMetadata.Transformer transformer = prev.transformer();
+        DataPlacement placement = prev.placements.get(metaParams);
+        // Reset any partially completed transition by removing the pending 
replica from the write group
         if (reconfigureCMS.next.activeTransition != null)
         {
             InetAddressAndPort pendingEndpoint = 
prev.directory.endpoint(reconfigureCMS.next.activeTransition.nodeId);
             Replica pendingReplica = new Replica(pendingEndpoint, entireRange, 
true);
-            DataPlacement.Builder builder = 
prev.placements.get(metaParams).unbuild()
-                                                           
.withoutWriteReplica(prev.nextEpoch(), pendingReplica);
-
-            DataPlacement placement = builder.build();
-            if (!placement.reads.equals(placement.writes))
-                return new Rejected(ExceptionCode.INVALID, 
String.format("Placements will be inconsistent if this transformation is 
applied:\nReads %s\nWrites: %s",
-                                                                         
placement.reads,
-                                                                         
placement.writes));
+            placement = placement.unbuild()
+                                 .withoutWriteReplica(prev.nextEpoch(), 
pendingReplica)
+                                 .build();
+        }
+        if (!placement.reads.equals(placement.writes))
+            return new Rejected(ExceptionCode.INVALID, 
String.format("Placements will be inconsistent if this transformation is 
applied:\nReads %s\nWrites: %s",
+                                                                     
placement.reads,
+                                                                     
placement.writes));
+
+        // Reset the replication params for the meta keyspace based on the 
actual placement in case they no longer match
+        ReplicationParams fromPlacement = 
getAccurateReplication(prev.directory, placement);
+
+        // If they no longer match, i.e. the transitions completed so far did 
not bring the placements into line with
+        // the configuration, remove the entry keyed by the existing 
configured params.
+        DataPlacements.Builder builder = prev.placements.unbuild();
+        if (!metaParams.equals(fromPlacement))
+        {
+            builder = builder.without(metaParams);
 
-            transformer = 
transformer.with(prev.placements.unbuild().with(metaParams, placement).build());
+            // Also update schema with the corrected params
+            KeyspaceMetadata keyspace = 
prev.schema.getKeyspaceMetadata(SchemaConstants.METADATA_KEYSPACE_NAME);
+            KeyspaceMetadata newKeyspace = keyspace.withSwapped(new 
KeyspaceParams(keyspace.params.durableWrites, fromPlacement));
+            transformer = transformer.with(new 
DistributedSchema(prev.schema.getKeyspaces().withAddedOrUpdated(newKeyspace)));
         }
 
+        // finally, add the possibly corrected placement keyed by the possibly 
corrected params
+        builder = builder.with(fromPlacement, placement);
+        transformer = transformer.with(builder.build());
+
         return 
Transformation.success(transformer.with(prev.inProgressSequences.without(ReconfigureCMS.SequenceKey.instance))
                                                  
.with(prev.lockedRanges.unlock(reconfigureCMS.next.lockKey)),
                                       EntireRange.affectedRanges(prev));
     }
 
+    private ReplicationParams getAccurateReplication(Directory directory, 
DataPlacement placement)
+    {
+        Map<String, Integer> replicasPerDc = new HashMap<>();
+        placement.writes.byEndpoint().keySet().forEach(i -> {
+            String dc = directory.location(directory.peerId(i)).datacenter;
+            int count = replicasPerDc.getOrDefault(dc, 0);
+            replicasPerDc.put(dc, ++count);
+        });
+        return ReplicationParams.ntsMeta(replicasPerDc);
+    }
+
     @Override
     public String toString()
     {
diff --git a/src/java/org/apache/cassandra/tcm/sequences/ReconfigureCMS.java 
b/src/java/org/apache/cassandra/tcm/sequences/ReconfigureCMS.java
index a3e65eead6..afa0e5d62b 100644
--- a/src/java/org/apache/cassandra/tcm/sequences/ReconfigureCMS.java
+++ b/src/java/org/apache/cassandra/tcm/sequences/ReconfigureCMS.java
@@ -255,6 +255,16 @@ public class ReconfigureCMS extends 
MultiStepOperation<AdvanceCMSReconfiguration
 
     }
 
+    @Override
+    public String toString()
+    {
+        return "ReconfigureCMS{" +
+               "next=" + next +
+               ", idx=" + idx +
+               ", latestModification=" + latestModification +
+               '}';
+    }
+
     static void repairPaxosTopology()
     {
         Retry.Backoff retry = new 
Retry.Backoff(TCMMetrics.instance.repairPaxosTopologyRetries);
@@ -344,6 +354,12 @@ public class ReconfigureCMS extends 
MultiStepOperation<AdvanceCMSReconfiguration
 
         private SequenceKey(){}
 
+        @Override
+        public String toString()
+        {
+            return "Reconfigure CMS";
+        }
+
         public static class Serializer implements 
MetadataSerializer<SequenceKey>
         {
 
diff --git a/src/java/org/apache/cassandra/tools/nodetool/ReconfigureCMS.java 
b/src/java/org/apache/cassandra/tools/nodetool/ReconfigureCMS.java
index 0feff7d9ea..7133a44dc9 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/ReconfigureCMS.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/ReconfigureCMS.java
@@ -42,10 +42,10 @@ public class ReconfigureCMS extends NodeTool.NodeToolCmd
     description = "Whether or not a previously interrupted sequence should be 
resumed")
     private boolean resume = false;
 
-    @Option(title = "sync",
-    name = {"-s", "--sync"},
-    description = "Whether or not nodetool should block and wait for 
reconfiguration to finish")
-    private boolean sync = false;
+    @Option(title = "cancel",
+    name = {"-c", "--cancel"},
+    description = "Cancels any in progress CMS reconfiguration")
+    private boolean cancel = false;
 
     @Arguments(usage = "[<replication factor>] or 
<datacenter>:<replication_factor> ... ", description = "Replication factor of 
new CMS")
     private List<String> args = new ArrayList<>();
@@ -76,6 +76,12 @@ public class ReconfigureCMS extends NodeTool.NodeToolCmd
             return;
         }
 
+        if (cancel)
+        {
+            probe.getCMSOperationsProxy().cancelReconfigureCms();
+            return;
+        }
+
         if (args.isEmpty())
             throw new IllegalArgumentException("Replication factor is empty");
 
@@ -95,7 +101,7 @@ public class ReconfigureCMS extends NodeTool.NodeToolCmd
                 {
                     throw new IllegalArgumentException(String.format("Can not 
parse replication factor from %s", args.get(0)));
                 }
-                probe.getCMSOperationsProxy().reconfigureCMS(parsedRf, sync);
+                probe.getCMSOperationsProxy().reconfigureCMS(parsedRf);
                 return;
             }
             else
@@ -117,6 +123,6 @@ public class ReconfigureCMS extends NodeTool.NodeToolCmd
             }
         }
 
-        probe.getCMSOperationsProxy().reconfigureCMS(parsedRfs, sync);
+        probe.getCMSOperationsProxy().reconfigureCMS(parsedRfs);
     }
 }
diff --git 
a/test/distributed/org/apache/cassandra/distributed/test/log/ReconfigureCMSTest.java
 
b/test/distributed/org/apache/cassandra/distributed/test/log/ReconfigureCMSTest.java
index 38a595b5af..0c23ac429d 100644
--- 
a/test/distributed/org/apache/cassandra/distributed/test/log/ReconfigureCMSTest.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/test/log/ReconfigureCMSTest.java
@@ -35,7 +35,6 @@ import org.apache.cassandra.tcm.ClusterMetadata;
 import org.apache.cassandra.tcm.ClusterMetadataService;
 import org.apache.cassandra.tcm.ownership.DataPlacement;
 import org.apache.cassandra.tcm.ownership.EntireRange;
-import org.apache.cassandra.tcm.sequences.CancelCMSReconfiguration;
 import org.apache.cassandra.tcm.sequences.ProgressBarrier;
 import org.apache.cassandra.tcm.sequences.ReconfigureCMS;
 import org.apache.cassandra.tcm.transformations.cms.PrepareCMSReconfiguration;
@@ -55,9 +54,9 @@ public class ReconfigureCMSTest extends FuzzTestBase
             cluster.setUncaughtExceptionsFilter(t -> t.getMessage() != null && 
t.getMessage().contains("There are not enough nodes in dc0 datacenter to 
satisfy replication factor"));
             Random rnd = new Random(2);
             Supplier<Integer> nodeSelector = () -> rnd.nextInt(cluster.size() 
- 1) + 1;
-            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"--sync", "0").asserts().failure();
-            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"--sync", "500").asserts().failure();
-            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"--sync", "5").asserts().success();
+            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"0").asserts().failure();
+            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"500").asserts().failure();
+            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"5").asserts().success();
             cluster.get(1).runOnInstance(() -> {
                 ClusterMetadata metadata = ClusterMetadata.current();
                 Assert.assertEquals(5, metadata.fullCMSMembers().size());
@@ -68,7 +67,7 @@ public class ReconfigureCMSTest extends FuzzTestBase
                 Assert.assertTrue(i.executeInternal(String.format("SELECT * 
FROM %s.%s", SchemaConstants.METADATA_KEYSPACE_NAME, 
DistributedMetadataLogKeyspace.TABLE_NAME)).length > 0);
             });
 
-            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"--sync", "1").asserts().success();
+            cluster.get(nodeSelector.get()).nodetoolResult("reconfigurecms", 
"1").asserts().success();
             cluster.get(1).runOnInstance(() -> {
                 ClusterMetadata metadata = ClusterMetadata.current();
                 Assert.assertEquals(1, metadata.fullCMSMembers().size());
@@ -88,7 +87,7 @@ public class ReconfigureCMSTest extends FuzzTestBase
                                                               
.with(Feature.NETWORK, Feature.GOSSIP))
                                       .start())
         {
-            cluster.get(1).nodetoolResult("reconfigurecms", "--sync", 
"2").asserts().success();
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"2").asserts().success();
             cluster.get(1).runOnInstance(() -> {
                 ClusterMetadataService.instance().commit(new 
PrepareCMSReconfiguration.Complex(ReplicationParams.simple(3).asMeta()));
                 ReconfigureCMS reconfigureCMS = (ReconfigureCMS) 
ClusterMetadata.current().inProgressSequences.get(ReconfigureCMS.SequenceKey.instance);
@@ -105,14 +104,17 @@ public class ReconfigureCMSTest extends FuzzTestBase
                 }
                 reconfigureCMS = (ReconfigureCMS) 
ClusterMetadata.current().inProgressSequences.get(ReconfigureCMS.SequenceKey.instance);
                 Assert.assertNotNull(reconfigureCMS.next.activeTransition);
-
-                
ClusterMetadataService.instance().commit(CancelCMSReconfiguration.instance);
+            });
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"--cancel").asserts().success();
+            cluster.get(1).runOnInstance(() -> {
                 
ProgressBarrier.propagateLast(EntireRange.affectedRanges(ClusterMetadata.current()));
                 ClusterMetadata metadata = ClusterMetadata.current();
                 
Assert.assertNull(metadata.inProgressSequences.get(ReconfigureCMS.SequenceKey.instance));
                 Assert.assertEquals(2, metadata.fullCMSMembers().size());
-                DataPlacement placements = 
metadata.placements.get(ReplicationParams.meta(metadata));
+                ReplicationParams params = ReplicationParams.meta(metadata);
+                DataPlacement placements = metadata.placements.get(params);
                 Assert.assertEquals(placements.reads, placements.writes);
+                Assert.assertEquals(metadata.fullCMSMembers().size(), 
Integer.parseInt(params.asMap().get("dc0")));
             });
 
             cluster.get(1).runOnInstance(() -> {
@@ -127,8 +129,9 @@ public class ReconfigureCMSTest extends FuzzTestBase
                 
ProgressBarrier.propagateLast(EntireRange.affectedRanges(ClusterMetadata.current()));
                 reconfigureCMS = (ReconfigureCMS) 
ClusterMetadata.current().inProgressSequences.get(ReconfigureCMS.SequenceKey.instance);
                 Assert.assertNull(reconfigureCMS.next.activeTransition);
-
-                
ClusterMetadataService.instance().commit(CancelCMSReconfiguration.instance);
+            });
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"--cancel").asserts().success();
+            cluster.get(1).runOnInstance(() -> {
                 
ProgressBarrier.propagateLast(EntireRange.affectedRanges(ClusterMetadata.current()));
                 ClusterMetadata metadata = ClusterMetadata.current();
                 
Assert.assertNull(metadata.inProgressSequences.get(ReconfigureCMS.SequenceKey.instance));
diff --git 
a/test/distributed/org/apache/cassandra/distributed/test/log/TriggeredReconfigureCMSTest.java
 
b/test/distributed/org/apache/cassandra/distributed/test/log/TriggeredReconfigureCMSTest.java
index 1f46e04e1d..44b8cada6f 100644
--- 
a/test/distributed/org/apache/cassandra/distributed/test/log/TriggeredReconfigureCMSTest.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/test/log/TriggeredReconfigureCMSTest.java
@@ -60,7 +60,7 @@ public class TriggeredReconfigureCMSTest extends FuzzTestBase
                                                               
.with(Feature.NETWORK, Feature.GOSSIP))
                                       .start())
         {
-            cluster.get(1).nodetoolResult("reconfigurecms", "--sync", 
"3").asserts().success();
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"3").asserts().success();
             Set<String> cms = getCMSMembers(cluster.get(1));
             assertEquals(3, cms.size());
 
@@ -100,7 +100,7 @@ public class TriggeredReconfigureCMSTest extends 
FuzzTestBase
                                                               
.with(Feature.NETWORK, Feature.GOSSIP))
                                       .start())
         {
-            cluster.get(1).nodetoolResult("reconfigurecms", "--sync", 
"3").asserts().success();
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"3").asserts().success();
             Set<String> cms = getCMSMembers(cluster.get(1));
             assertEquals(3, cms.size());
             cluster.get(1).nodetoolResult("decommission").asserts().success();
@@ -119,7 +119,7 @@ public class TriggeredReconfigureCMSTest extends 
FuzzTestBase
                                                               
.with(Feature.NETWORK, Feature.GOSSIP))
                                       .start())
         {
-            cluster.get(1).nodetoolResult("reconfigurecms", "--sync", 
"3").asserts().success();
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"3").asserts().success();
             Set<String> cms = getCMSMembers(cluster.get(1));
             assertEquals(3, cms.size());
             assertTrue(cms.contains("/127.0.0.1"));
diff --git 
a/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeHarryTest.java
 
b/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeHarryTest.java
index c8dffce52a..1ed127bbb6 100644
--- 
a/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeHarryTest.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeHarryTest.java
@@ -118,7 +118,7 @@ public class ClusterMetadataUpgradeHarryTest extends 
UpgradeTestBase
             });
 
             cluster.get(1).nodetoolResult("initializecms").asserts().success();
-            cluster.get(1).nodetoolResult("reconfigurecms", 
"datacenter1:3").asserts().success();
+            cluster.get(1).nodetoolResult("reconfigurecms", 
"3").asserts().success();
             cluster.schemaChange(withKeyspace("create table %s.xyz (id int 
primary key)"));
             stopLatch.decrement();
             harryRunner.get().get();
diff --git 
a/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeTest.java
 
b/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeTest.java
index f6a8f8b7c9..b6b501b54c 100644
--- 
a/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeTest.java
+++ 
b/test/distributed/org/apache/cassandra/distributed/upgrade/ClusterMetadataUpgradeTest.java
@@ -55,7 +55,7 @@ public class ClusterMetadataUpgradeTest extends 
UpgradeTestBase
                 assertFalse("node " + i.config().num() + " is still in 
MIGRATING STATE",
                             ClusterUtils.isMigrating((IInvokableInstance) i));
             });
-            cluster.get(2).nodetoolResult("reconfigurecms", "--sync", 
"3").asserts().success();
+            cluster.get(2).nodetoolResult("reconfigurecms", 
"3").asserts().success();
             cluster.schemaChange(withKeyspace("create table %s.xyz (id int 
primary key)"));
             cluster.forEach(i -> {
                 Object [][] res = i.executeInternal("select host_id from 
system.local");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to