From 59d57e3eb7cc4b92646095bd68eb2a06d1bd2c59 Mon Sep 17 00:00:00 2001 From: Sam Tunnicliffe Date: Mon, 16 Mar 2026 15:23:03 +0000 Subject: [PATCH] Remove potential gossip deadlock during decommission Remove unnecessary updating of local app state when leaving Patch by Sam Tunnicliffe; reviewed by Marcus Eriksson for CASSANDRA-21143 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/gms/Gossiper.java | 10 ---------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d42a73c539..bb2cd1e6da 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 5.1 + * Avoid potential gossip thread deadlock during decommission (CASSANDRA-21143) * Improve construction of consensus groups for range movements (CASSANDRA-21142) * Support compaction_read_disk_access_mode for cursor-based compaction (CASSANDRA-21147) * Allow value/element indexing on frozen collections in SAI (CASSANDRA-18492) diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java index c730e080ae..e35ba861af 100644 --- a/src/java/org/apache/cassandra/gms/Gossiper.java +++ b/src/java/org/apache/cassandra/gms/Gossiper.java @@ -2194,16 +2194,6 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean, toSend.forceNewerGenerationUnsafe(); toSend.markDead(); VersionedValue value = StorageService.instance.valueFactory.left(tokens, computeExpireTime()); - - if (left.equals(getBroadcastAddressAndPort())) - { - // Adding local state bumps the value's version. To keep this consistent across - // the cluster, re-fetch it before broadcasting. - Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS_WITH_PORT, value); - value = Gossiper.instance.endpointStateMap.get(getBroadcastAddressAndPort()) - .getApplicationState(ApplicationState.STATUS_WITH_PORT); - } - toSend.addApplicationState(ApplicationState.STATUS_WITH_PORT, value); GossipDigestAck2 payload = new GossipDigestAck2(Collections.singletonMap(left, toSend)); logger.info("Sending app state with status {} to {}", value.value, sendTo);