apache/cassandra · error · IllegalArgumentException
Cannot assassinate the node when sequence of kind
Error message
Cannot assassinate the node when sequence of kind ${sequenceKind} is in progress. What it means
Generic guard for the assassinate path: when the node has any in-progress sequence kind that the tool cannot cancel and which is not JOIN/REPLACE, it throws this IllegalArgumentException because assassinating a node with that sequence active is unsafe/unsupported.
Solutions
- Cancel or complete the in-progress sequence via the appropriate CMSOfflineTool subcommand (e.g. finish/cancel move) before assassinating.
- Restart the node and let the sequence resolve, then remove it through decommission.
- Manually clear the sequence from cluster metadata only as a last-resort recovery with community guidance.
Defensive patterns
Strategy: validation
Validate before calling
MultiStepOperation<?> op = meta.inProgressSequences.get(nodeId);
if (op != null && !supportedCancelSequences.contains(op.kind()))
throw new IllegalStateException("Cancel or complete sequence " + op.kind() + " before assassinating " + nodeId); Try / catch
try { tool.assassinate(nodeId); } catch (IllegalArgumentException e) { if (e.getMessage().contains("Cannot assassinate")) { cancelSequenceFirst(nodeId); } else throw e; } Prevention
- Always resolve in-progress sequences (move, rebuild, etc.) before force-removal.
- Audit leftover sequences after any interrupted operation.
- Use decommission when the node is reachable; reserve assassinate as last resort.
When it happens
Trigger: Assassinate operation in `execute` when metadata.inProgressSequences contains a kind not in supportedCancelSequences and not JOIN/REPLACE (e.g. MOVE, REBUILD, or another MultiStepOperation.Kind).
Common situations: Operator force-removes a node that had an in-progress MOVE or other range-movement sequence; leftover sequence state in the offline metadata snapshot from an interrupted operation.
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
- Another sequence of kind
- Cannot assassinate the node when sequence of kind
- Sequence of kind is in progress for node . Cannot proceed…
- Aggregate function cannot be used for masking table columns
- Altering field types is no longer supported
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/9ff3f6fb5bd5eec0.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/tools/CMSOfflineTool.java:370
NodeId nodeId = nodeIdentifierOption.getNodeId(metadata);
// Check if there are any in-progress sequences for given node
// If any, then cancel the sequence and then assassinate it
if (metadata.inProgressSequences.contains(nodeId))
{
MultiStepOperation<?> multiStepOperation = metadata.inProgressSequences.get(nodeId);
MultiStepOperation.Kind sequenceKind = multiStepOperation.kind();
if (!supportedCancelSequences.contains(sequenceKind))
{
if (sequenceKind == MultiStepOperation.Kind.JOIN || sequenceKind == MultiStepOperation.Kind.REPLACE)
{
throw new IllegalArgumentException("Cannot assassinate the node when sequence of kind " +
sequenceKind + " is in progress. " +
"Run abortbootstrap instead.");
}
else
{
throw new IllegalArgumentException("Cannot assassinate the node when sequence of kind " +
sequenceKind + " is in progress.");
}
}
output.out.printf("Cancelling in-progress sequence of kind %s before assassinating node.\n",
metadata.inProgressSequences.get(nodeId).kind());
metadata = new CancelInProgressSequence(nodeId).execute(metadata).success().metadata;
}
metadata = maybeReconfigureCMS(metadata, nodeId);
Assassinate transformation = new Assassinate(nodeId, ClusterMetadataService.instance().placementProvider());
ClusterMetadata updatedMetadata = transformation.execute(metadata).success().metadata;
writeMetadata(output, updatedMetadata, outputFilePath);
}
ClusterMetadata maybeReconfigureCMS(ClusterMetadata metadata, NodeId nodeId)
{View on GitHub (pinned to 88fd0f6a0e)