apache/cassandra · error · RuntimeException

Error decommissioning node

Error message

Error decommissioning node

What it means

RuntimeException wrapper from Decommission.execute when probe.decommission() throws InterruptedException while waiting for the decommission operation. The node's decommission was initiated but the nodetool client's wait was interrupted; the operation on the server may still be in progress.

Solutions

  1. Re-run nodetool status / netstats to check whether decommission continues on the node
  2. Avoid interrupting nodetool during long decommissions
  3. Restore the interrupt status in calling code if embedding NodeProbe
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/java/org/apache/cassandra/tools/nodetool/Decommission.java:52 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/95df9bce699274bd. Report an issue: GitHub.

Appendix: source

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

    @Override
    public void execute(NodeProbe probe)
    {
        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)