apache/cassandra · error · IOException
throw new IOException(e)
Error message
throw new IOException(e)
What it means
This is NodeProbe's catch-all wrapper for exceptions raised during an assistted/bootstrap-related operation (assassinate/removal flows that register a JMX notification listener `monitor`). Any failure in the proxied operation or in the notification-listener registration is rethrown as an IOException with the original exception as cause. The finally block also detaches the listener.
Source
Thrown at src/java/org/apache/cassandra/tools/NodeProbe.java:2459
{
if (jmxc != null)
jmxc.addConnectionNotificationListener(monitor, null, null);
ssProxy.addNotificationListener(monitor, null, null);
if (ssProxy.resumeBootstrap())
{
out.println("Resuming bootstrap");
monitor.awaitCompletion();
if (monitor.getError() != null)
throw monitor.getError();
}
else
{
out.println("Node is already bootstrapped.");
}
}
catch (Exception e)
{
throw new IOException(e);
}
finally
{
try
{
ssProxy.removeNotificationListener(monitor);
if (jmxc != null)
jmxc.removeConnectionNotificationListener(monitor);
}
catch (Throwable e)
{
out.println("Exception occurred during clean-up. " + e);
}
}
}
public Map<String, List<Integer>> getMaximumPoolSizes(List<String> stageNames)
{View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Read the wrapped cause (e.getCause()) to identify the server-side failure.
- Check the target node's system.log for the underlying operation error.
- Verify JMX connectivity and that the node is in the expected state (e.g. not already bootstrapped, as printed by the tool).
- Retry the command once the node state/JMX connection is healthy.
Example fix
// before (opaque failure) nodetool decommission // after (inspect cause first) # tail -f /var/log/cassandra/system.log while re-running the nodetool command
Defensive patterns
Strategy: try-catch
Try / catch
try { probe.decommission(); }
catch (IOException e) { Throwable cause = e.getCause(); log.error("Operation failed: {}", cause == null ? e : cause); } Prevention
- Check node health (nodetool status, gossip state) before streaming operations
- Confirm node is not already bootstrapped/decommissioned before re-running
- Keep JMX connectivity stable; avoid long-lived NodeProbe objects across operations
When it happens
Trigger: Invoking a NodeProbe method (e.g. decommission/assassinate/move style operations around this try block) when the remote node throws, or when JMX notification listener add/remove fails.
Common situations: Running `nodetool decommission`/bootstrap-related commands against an unhealthy node; node already bootstrapped; JMX connection dropped mid-operation; server-side storage service exception.
Understand the failure class
Background: "API request failed": what wrapped HTTP errors from external APIs mean and how to find the real cause — this error's family across 29 libraries.
Related errors
- throw new IOException(e.getMessage())
- Error during clearing snapshots
- Null MBeanServer
- Node is not yet bootstrapped completely. Use nodetool to che
- Can't abort bootstrap for - it does not exist in cluster me
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/35e9bfb76bd7fc26.
Report an issue: GitHub.