apache/cassandra · error · IllegalStateException

Unsupported operation

Error message

Unsupported operation: %s

What it means

RuntimeException from Decommission.execute when the wrapped failure is an UnsupportedOperationException from the server — e.g. decommission is not supported for this node's state or configuration (such as force decommission on a node where it is disallowed, or operation unsupported in the current mode).

Solutions

  1. Check the chained message for which operation is unsupported
  2. Ensure the node is eligible for decommission (not the last node in a datacenter unless intended)
  3. Use the appropriate nodetool flag or remove the node via a different procedure
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/java/org/apache/cassandra/tools/nodetool/Decommission.java:55 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at src/java/org/apache/cassandra/tools/nodetool/Decommission.java:55

        try
        {
            if (probe.getStorageService().isDecommissioning())
            {
                probe.output().out.println("This node is still decommissioning.");
                return;
            }
            if ("DECOMMISSIONED".equals(probe.getStorageService().getBootstrapState()))
            {
                probe.output().out.println("Node was already decommissioned.");
                return;
            }
            probe.decommission(force);
        } catch (InterruptedException e)
        {
            throw new RuntimeException("Error decommissioning node", e);
        } catch (UnsupportedOperationException e)
        {
            throw new IllegalStateException("Unsupported operation: " + e.getMessage(), e);
        }
    }

    @Command(name = "abortdecommission", description = "Abort an ongoing, failed decommission")
    public static class Abort extends AbstractCommand
    {
        @Option(paramLabel = "nodeId", names = { "--node" })
        private String nodeId;

        @Override
        protected void execute(NodeProbe probe)
        {
            probe.abortDecommission(nodeId);
        }
    }
}

View on GitHub (pinned to 88fd0f6a0e)