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

  1. If re-joining is intentional, start with -Dcassandra.override_decommission=true (cassandra.override_decommission=true)
  2. Wipe the data directories and let the node bootstrap fresh
  3. Restore the correct system keyspace state from a pre-decommission backup
  4. 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

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


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/1a5a7b97322ec963. Report an issue: GitHub.