apache/cassandra · error · RuntimeException
Can't abort bootstrap for since it is not bootstrapping
Error message
Can't abort bootstrap for since it is not bootstrapping
What it means
Thrown by StorageService.abortBootstrap when the node's directory state is REGISTERED/BOOTSTRAPPING/BOOT_REPLACING and an in-progress sequence exists for it, but that sequence's kind is neither JOIN nor REPLACE - i.e. the tracked operation is not actually a bootstrap, so cancelling it as one is refused.
Source
Thrown at src/java/org/apache/cassandra/service/StorageService.java:1684
logger.info("Aborting bootstrap for {}", StringUtils.isEmpty(nodeStr) ? endpointStr : nodeStr);
ClusterMetadata metadata = ClusterMetadata.current();
NodeId nodeId = parseNodeIdOrEndpoint(metadata, nodeStr, endpointStr);
InetAddressAndPort endpoint = metadata.directory.endpoint(nodeId);
if (endpoint == null)
throw new IllegalArgumentException("Can't abort bootstrap for " + nodeId + " - it does not exist in cluster metadata");
if (Gossiper.instance.isKnownEndpoint(endpoint) && FailureDetector.instance.isAlive(endpoint))
throw new RuntimeException("Can't abort bootstrap for " + nodeId + " - it is alive");
NodeState nodeState = metadata.directory.peerState(nodeId);
switch (nodeState)
{
case REGISTERED:
case BOOTSTRAPPING:
case BOOT_REPLACING:
if (metadata.inProgressSequences.contains(nodeId))
{
MultiStepOperation<?> seq = metadata.inProgressSequences.get(nodeId);
if (seq.kind() != MultiStepOperation.Kind.JOIN && seq.kind() != MultiStepOperation.Kind.REPLACE)
throw new RuntimeException("Can't abort bootstrap for " + nodeId + " since it is not bootstrapping");
ClusterMetadataService.instance().commit(new CancelInProgressSequence(nodeId));
}
ClusterMetadataService.instance().commit(new Unregister(nodeId, EnumSet.of(REGISTERED, BOOTSTRAPPING, BOOT_REPLACING), ClusterMetadataService.instance().placementProvider()));
break;
default:
throw new RuntimeException("Can't abort bootstrap for node " + nodeId + " since the state is " + nodeState);
}
}
private static NodeId parseNodeIdOrEndpoint(ClusterMetadata metadata, String nodeStr, String endpointStr)
{
NodeId nodeId;
if (!StringUtils.isEmpty(nodeStr))
{
try
{
nodeId = NodeId.fromString(nodeStr);
}View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Inspect the in-progress sequence kind (ClusterMetadata inProgressSequences) and use the correct abort/cancel command for that operation kind
- If the sequence is stale/corrupted, restart the node so the sequence is rebuilt or completes, then retry
- Use the operation-specific cancel path (e.g. cancel the rebuild) instead of abortbootstrap
- File/consult CASSANDRA issues if the state seems inconsistent - this may indicate metadata inconsistency requiring operator cleanup
Defensive patterns
Strategy: validation
Validate before calling
// Confirm the in-progress sequence is a JOIN/REPLACE before aborting // Inspect ClusterMetadata inProgressSequences for the node; only call abortbootstrap // when kind is JOIN or REPLACE, otherwise use the operation-specific cancel.
Try / catch
try {
probe.abortBootstrap(nodeId);
} catch (RuntimeException e) {
if (e.getMessage().contains("since it is not bootstrapping"))
log.warn("In-progress sequence is not JOIN/REPLACE; use the matching cancel operation");
else throw e;
} Prevention
- Distinguish bootstrap from rebuild/other streaming operations before choosing an abort command
- Inspect in-progress sequence kind via cluster metadata tooling
- Avoid leaving partially-cancelled sequences; let operations complete or cancel them properly
When it happens
Trigger: Aborting a node whose inProgressSequences entry is a different multi-step operation kind (e.g. a REBUILD or other MultiStepOperation) while its peer state still reads BOOTSTRAPPING.
Common situations: Node previously completed a bootstrap and is now running a different streaming operation; operator confuses rebuild/repair operations with bootstrap; state left from a partially-cancelled sequence.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Can't abort bootstrap for - it does not exist in cluster me
- Unknown endpoint:
- Node is not yet bootstrapped completely. Use nodetool to che
- Can't abort bootstrap for - it is alive
- Can't abort bootstrap for node since the state is
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/383219b8a314fe9e.
Report an issue: GitHub.