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