You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by mc...@apache.org on 2022/01/26 12:47:17 UTC

[cassandra] branch trunk updated: Fix restarting a node when other nodes are down in dtests

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

mck 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 d543dae  Fix restarting a node when other nodes are down in dtests
d543dae is described below

commit d543dae2cd0d6540d95eb3252d79e75393fd993d
Author: Jacek Lewandowski <le...@gmail.com>
AuthorDate: Thu Dec 16 08:45:05 2021 +0100

    Fix restarting a node when other nodes are down in dtests
    
     patch by Jacek Lewandowski; reviewed by Michael Semb Wever for CASSANDRA-17214
---
 build.xml                                          |  2 +-
 .../distributed/impl/AbstractCluster.java          |  6 ++++
 .../cassandra/distributed/impl/Instance.java       |  8 +++--
 .../cassandra/distributed/test/RestartTest.java    | 39 ++++++++++++++++++++++
 4 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/build.xml b/build.xml
index 69c96cf..67a758c 100644
--- a/build.xml
+++ b/build.xml
@@ -538,7 +538,7 @@
           <dependency groupId="com.google.code.java-allocation-instrumenter" artifactId="java-allocation-instrumenter" version="${allocation-instrumenter.version}" scope="test">
             <exclusion groupId="com.google.guava" artifactId="guava"/>
           </dependency>
-          <dependency groupId="org.apache.cassandra" artifactId="dtest-api" version="0.0.11" scope="test"/>
+          <dependency groupId="org.apache.cassandra" artifactId="dtest-api" version="0.0.12" scope="test"/>
           <dependency groupId="org.reflections" artifactId="reflections" version="0.9.12" scope="test"/>
           <dependency groupId="com.puppycrawl.tools" artifactId="checkstyle" version="8.40" scope="test"/>
           <dependency groupId="org.apache.hadoop" artifactId="hadoop-core" version="1.0.3" scope="provided">
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
index fc70ce1..753f874 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/AbstractCluster.java
@@ -282,6 +282,12 @@ public abstract class AbstractCluster<I extends IInstance> implements ICluster<I
         }
 
         @Override
+        public boolean isValid()
+        {
+            return delegate != null;
+        }
+
+        @Override
         public synchronized void startup()
         {
             startup(AbstractCluster.this);
diff --git a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
index 6ea12fa..549cb0c 100644
--- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
+++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java
@@ -38,6 +38,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.stream.Stream;
 import javax.management.ListenerNotFoundException;
 import javax.management.Notification;
 import javax.management.NotificationListener;
@@ -632,12 +633,13 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance
                 }
                 else
                 {
+                    Stream peers = cluster.stream().filter(instance -> ((IInstance) instance).isValid());
                     if (config.has(BLANK_GOSSIP))
-                        cluster.stream().forEach(peer -> GossipHelper.statusToBlank((IInvokableInstance) peer).accept(this));
+                        peers.forEach(peer -> GossipHelper.statusToBlank((IInvokableInstance) peer).accept(this));
                     else if (cluster instanceof Cluster)
-                        cluster.stream().forEach(peer -> GossipHelper.statusToNormal((IInvokableInstance) peer).accept(this));
+                        peers.forEach(peer -> GossipHelper.statusToNormal((IInvokableInstance) peer).accept(this));
                     else
-                        cluster.stream().forEach(peer -> GossipHelper.unsafeStatusToNormal(this, (IInstance) peer));
+                        peers.forEach(peer -> GossipHelper.unsafeStatusToNormal(this, (IInstance) peer));
 
                     StorageService.instance.setUpDistributedSystemKeyspaces();
                     StorageService.instance.setNormalModeUnsafe();
diff --git a/test/distributed/org/apache/cassandra/distributed/test/RestartTest.java b/test/distributed/org/apache/cassandra/distributed/test/RestartTest.java
new file mode 100644
index 0000000..4d3049b
--- /dev/null
+++ b/test/distributed/org/apache/cassandra/distributed/test/RestartTest.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.distributed.test;
+
+import org.junit.Test;
+
+import org.apache.cassandra.distributed.Cluster;
+import org.apache.cassandra.utils.FBUtilities;
+
+public class RestartTest extends TestBaseImpl
+{
+    @Test
+    public void test() throws Exception
+    {
+        try (Cluster cluster = init(Cluster.build(2).withDataDirCount(1).start()))
+        {
+            FBUtilities.waitOnFuture(cluster.get(2).shutdown());
+            FBUtilities.waitOnFuture(cluster.get(1).shutdown());
+            cluster.get(1).startup();
+            cluster.get(2).startup();
+        }
+    }
+}

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org