Clone EndpointState before sending GossipShutdown message

Patch by marcuse; reviewed by David Capwell for CASSANDRA-19115
This commit is contained in:
Marcus Eriksson 2023-11-29 13:17:39 +01:00
parent 0b8f889213
commit 806a395b9c
2 changed files with 4 additions and 1 deletions

View File

@ -1,4 +1,5 @@
5.0-beta1
* Clone EndpointState before sending GossipShutdown message (CASSANDRA-19115)
* SAI indexes are marked queryable during truncation (CASSANDRA-19032)
* Enable Direct-IO feature for CommitLog files using Java native API's. (CASSANDRA-18464)
* SAI fixes for composite partitions, and static and non-static rows intersections (CASSANDRA-19034)

View File

@ -2205,7 +2205,9 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean,
logger.info("Announcing shutdown");
addLocalApplicationState(ApplicationState.STATUS_WITH_PORT, StorageService.instance.valueFactory.shutdown(true));
addLocalApplicationState(ApplicationState.STATUS, StorageService.instance.valueFactory.shutdown(true));
Message<GossipShutdown> message = Message.out(Verb.GOSSIP_SHUTDOWN, new GossipShutdown(mystate));
// clone endpointstate to avoid it changing between serializedSize and serialize calls
EndpointState clone = new EndpointState(mystate);
Message<GossipShutdown> message = Message.out(Verb.GOSSIP_SHUTDOWN, new GossipShutdown(clone));
for (InetAddressAndPort ep : liveEndpoints)
MessagingService.instance().send(message, ep);
Uninterruptibles.sleepUninterruptibly(SHUTDOWN_ANNOUNCE_DELAY_IN_MS.getInt(), TimeUnit.MILLISECONDS);