You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2020/08/04 22:43:09 UTC
[cassandra] branch cassandra-3.0 updated: Check for endpoint
collision with hibernating nodes
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch cassandra-3.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-3.0 by this push:
new c94ecec Check for endpoint collision with hibernating nodes
c94ecec is described below
commit c94ececec0fcd87459858370396d6cd586853787
Author: Stefan Miklosovic <st...@instaclustr.com>
AuthorDate: Mon Aug 3 08:37:00 2020 +0200
Check for endpoint collision with hibernating nodes
Patch by Stefan Miklosovic, reviewed by brandonwillias for
CASSANDRA-14599
---
CHANGES.txt | 1 +
src/java/org/apache/cassandra/gms/Gossiper.java | 15 +++++++++++++--
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 182dca3..7d4b7a9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.22:
+ * Check for endpoint collision with hibernating nodes (CASSANDRA-14599)
* Operational improvements and hardening for replica filtering protection (CASSANDRA-15907)
* stop_paranoid disk failure policy is ignored on CorruptSSTableException after node is up (CASSANDRA-15191)
* 3.x fails to start if commit log has range tombstones from a column which is also deleted (CASSANDRA-15970)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 7984dd4..7d708c1 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -33,6 +33,7 @@ import com.google.common.util.concurrent.ListenableFutureTask;
import com.google.common.util.concurrent.Uninterruptibles;
import io.netty.util.concurrent.FastThreadLocal;
+import org.apache.cassandra.db.SystemKeyspace;
import org.apache.cassandra.utils.ExecutorUtils;
import org.apache.cassandra.utils.MBeanWrapper;
import org.apache.cassandra.utils.NoSpamLogger;
@@ -794,12 +795,22 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
{
EndpointState epState = epStates.get(endpoint);
- // if there's no previous state, or the node was previously removed from the cluster, we're good
- if (epState == null || isDeadState(epState))
+ // if there's no previous state, we're good
+ if (epState == null)
return true;
String status = getGossipStatus(epState);
+ if (status.equals(VersionedValue.HIBERNATE)
+ && !SystemKeyspace.bootstrapComplete())
+ {
+ logger.warn("A node with the same IP in hibernate status was detected. Was a replacement already attempted?");
+ return false;
+ }
+
+ if (isDeadState(epState))
+ return true;
+
// these states are not allowed to join the cluster as it would not be safe
final List<String> unsafeStatuses = new ArrayList<String>() {{
add(""); // failed bootstrap but we did start gossiping
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org