This is an automated email from the ASF dual-hosted git repository. brandonwilliams pushed a commit to branch CASSANDRA-16847 in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 7f64f7d53f904a87f47afa942e5e67300325b1ae Author: Brandon Williams <brandonwilli...@apache.org> AuthorDate: Thu Aug 12 10:48:17 2021 -0500 Make assassinate more resilient to missing tokens --- src/java/org/apache/cassandra/gms/Gossiper.java | 8 +++++--- src/java/org/apache/cassandra/locator/TokenMetadata.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java index 1603693..08cd106 100644 --- a/src/java/org/apache/cassandra/gms/Gossiper.java +++ b/src/java/org/apache/cassandra/gms/Gossiper.java @@ -658,7 +658,6 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean InetAddress endpoint = InetAddress.getByName(address); runInGossipStageBlocking(() -> { EndpointState epState = endpointStateMap.get(endpoint); - Collection<Token> tokens = null; logger.warn("Assassinating {} via gossip", endpoint); if (epState == null) @@ -683,6 +682,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean epState.getHeartBeatState().forceNewerGenerationUnsafe(); } + Collection<Token> tokens = null; try { tokens = StorageService.instance.getTokenMetadata().getTokens(endpoint); @@ -690,8 +690,10 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean catch (Throwable th) { JVMStabilityInspector.inspectThrowable(th); - // TODO this is broken - logger.warn("Unable to calculate tokens for {}. Will use a random one", address); + } + if (tokens == null || tokens.isEmpty()) + { + logger.warn("Trying to assassinate an endpoint {} that does not have any tokens assigned. This should not have happened, trying to continue with a random token.", address); tokens = Collections.singletonList(StorageService.instance.getTokenMetadata().partitioner.getRandomToken()); } diff --git a/src/java/org/apache/cassandra/locator/TokenMetadata.java b/src/java/org/apache/cassandra/locator/TokenMetadata.java index cdd3885..8300a39 100644 --- a/src/java/org/apache/cassandra/locator/TokenMetadata.java +++ b/src/java/org/apache/cassandra/locator/TokenMetadata.java @@ -559,11 +559,11 @@ public class TokenMetadata public Collection<Token> getTokens(InetAddress endpoint) { assert endpoint != null; - assert isMember(endpoint); // don't want to return nulls lock.readLock().lock(); try { + assert isMember(endpoint); // don't want to return nulls return new ArrayList<>(tokenToEndpointMap.inverse().get(endpoint)); } finally --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org