apache/cassandra · critical · ConfigurationException
This node was decommissioned and will not rejoin the ring un
Error message
This node was decommissioned and will not rejoin the ring unless cassandra.override_decommission=true has been set, or all existing data is removed and the node is bootstrapped again
What it means
During initServer, Cassandra checks system.local for a recorded decommission. A decommissioned node is not allowed to rejoin the ring because its data is stale; the only sanctioned paths are setting cassandra.override_decommission=true or wiping the data directory and re-bootstrapping. If the override flag is not set, a ConfigurationException is thrown.
Source
Thrown at src/java/org/apache/cassandra/service/StorageService.java:803
if (!(notification instanceof SSTablesVersionsInUseChangeNotification))
return;
Set<Version> versions = ((SSTablesVersionsInUseChangeNotification) notification).versionsInUse;
logger.debug("Updating local sstables version in Gossip to {}", versions);
Gossiper.instance.addLocalApplicationState(ApplicationState.SSTABLE_VERSIONS,
valueFactory.sstableVersions(versions));
});
if (SystemKeyspace.wasDecommissioned())
{
if (CassandraRelevantProperties.OVERRIDE_DECOMMISSION.getBoolean())
{
logger.warn("This node was decommissioned, but overriding by operator request.");
}
else
{
throw new ConfigurationException("This node was decommissioned and will not rejoin the ring unless cassandra.override_decommission=true has been set, or all existing data is removed and the node is bootstrapped again");
}
}
if (DatabaseDescriptor.getReplaceTokens().size() > 0 || DatabaseDescriptor.getReplaceNode() != null)
throw new RuntimeException("Replace method removed; use cassandra.replace_address instead");
if (isReplacing())
{
if (SystemKeyspace.bootstrapComplete())
throw new RuntimeException("Cannot replace with a node that is already bootstrapped");
InetAddressAndPort replaceAddress = DatabaseDescriptor.getReplaceAddress();
Directory directory = ClusterMetadata.current().directory;
if (directory.peerId(replaceAddress) == null || directory.peerState(replaceAddress) != JOINED)
throw new RuntimeException(String.format("Cannot replace node %s which is not currently joined", replaceAddress));
BootstrapAndReplace.checkUnsafeReplace(shouldBootstrap());
}View on GitHub (pinned to 88fd0f6a0e)
Solutions
- If re-joining is intentional, start with -Dcassandra.override_decommission=true (cassandra.override_decommission=true)
- Wipe the data directories and let the node bootstrap fresh
- Restore the correct system keyspace state from a pre-decommission backup
- Check `nodetool info`/system.local peer status before restarting a node that was decommissioned
Example fix
// before bin/cassandra // after bin/cassandra -Dcassandra.override_decommission=true # or rm -rf data/* to rebootstrap
Defensive patterns
Strategy: validation
Validate before calling
String status = SELECT status FROM system.local; if ("DECOMMISSIONED".equals(status)) { /* override or wipe */ } Try / catch
try { startNode(); } catch (ConfigurationException e) { if (e.getMessage().contains("decommissioned")) { /* wipe data or restart with override */ } } Prevention
- Never restart a node that was decommissioned without a plan
- Keep decommission operations and snapshots clearly separated
- Document the override flag usage for on-call operators
When it happens
Trigger: Starting (initServer) a node whose system keyspace still contains the DECOMMISSIONED status, without -Dcassandra.override_decommission=true.
Common situations: Restoring a decommissioned node from an old snapshot; reverting a decommission operation; cloning a disk image from a node that was later decommissioned; misfired decommission that left status behind.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- %s has authorization enabled which requires %s to enable aut
- %s requires %s
- %s can't be used with %s
- %s does not support %s
- Failed to instantiate %s
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/1a5a7b97322ec963.
Report an issue: GitHub.