apache/cassandra · info
No local state, state is in silent shutdown, or node hasn't
Error message
No local state, state is in silent shutdown, or node hasn't joined, not announcing shutdown
What it means
During coordinated shutdown, Gossiper announces GOSSIP_SHUTDOWN to live peers only if the local node has valid endpoint state and has fully joined. If the local state is absent, already in silent shutdown, or the node never joined the ring, it warns that no shutdown announcement is sent and cancels the gossip task.
Source
Thrown at src/java/org/apache/cassandra/gms/Gossiper.java:1944
public void stop()
{
EndpointState mystate = endpointStateMap.get(getBroadcastAddressAndPort());
if (mystate != null && !isSilentShutdownState(mystate) && StorageService.instance.isJoined())
{
logger.info("Announcing shutdown");
shutdownAnnounced.set(true);
addLocalApplicationState(ApplicationState.STATUS_WITH_PORT, StorageService.instance.valueFactory.shutdown(true));
addLocalApplicationState(ApplicationState.STATUS, StorageService.instance.valueFactory.shutdown(true));
// 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);
}
else
logger.warn("No local state, state is in silent shutdown, or node hasn't joined, not announcing shutdown");
if (scheduledGossipTask != null)
scheduledGossipTask.cancel(false);
}
public boolean isEnabled()
{
ScheduledFuture<?> scheduledGossipTask = this.scheduledGossipTask;
return (scheduledGossipTask != null) && (!scheduledGossipTask.isCancelled());
}
@VisibleForTesting
public void initializeNodeUnsafe(InetAddressAndPort addr, UUID uuid, int generationNbr)
{
initializeNodeUnsafe(addr, uuid, MessagingService.current_version, generationNbr);
}
@VisibleForTesting
public void initializeNodeUnsafe(InetAddressAndPort addr, UUID uuid, int netVersion, int generationNbr)View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Confirm the node actually joined (nodetool status/statusbinary) before expecting a clean shutdown announcement.
- If shutting down a never-joined node, treat this as expected; the warning is harmless.
- Avoid repeated drain/stop calls; check shutdown scripts for idempotency.
- If state is stuck, wipe gossip state (data/system folder only per recovery docs) and re-bootstrap a fresh node.
Example fix
// before: draining a node that never joined nodetool drain # warns, not fully joined // after: verify join state first nodetool status # ensure node is UN before drain/decommission
Defensive patterns
Strategy: validation
Validate before calling
if (StorageService.instance.getOperationMode().equals("NORMAL") && Gossiper.instance.getEndpointStateForEndpoint(FBUtilities.getBroadcastAddressAndPort()) != null) { gossiper.sendShutdown(); } Type guard
boolean joined = "NORMAL".equals(StorageService.instance.getOperationMode());
Prevention
- Only expect shutdown announcements from joined nodes; make shutdown scripts idempotent.
- Check operation mode (nodetool status or logs) before drain.
- Investigate repeated 'hasn't joined' warnings — they hint at failed bootstrap.
When it happens
Trigger: Calling Gossiper.sendShutdown (via stopGossiping/drain) when the node's own endpoint state is null, isSilentShutdownState is true, or StorageService operation mode indicates the node never completed joining.
Common situations: Stopping a node that failed during bootstrap/Join; double drain or repeated shutdown scripts; node started but never joined the ring being stopped again; state corruption after crash mid-join.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Not executing task on GossipStage - it has shut down
- Unknown broadcast_address '
- broadcast_address cannot be a wildcard address (
- Unable to stop gossip because the node is not in the normal
- Can't abort bootstrap for - it is alive
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/51a21ac3b1d8c35d.
Report an issue: GitHub.