influxdata/influxdb · warning · CatalogError
tried to stop a node
Error message
tried to stop a node ({node_id}) that is already stopped What it means
This error is returned when a request to stop a node finds the node is already in the stopped state. Stopping is only valid from a running/paused state; the node id is included in the message. It prevents redundant or conflicting node-state transitions in the catalog.
Solutions
- Treat the node as already stopped and proceed — no action needed
- Check node state (`influxdb3 show nodes`) before issuing stop
- Make orchestration idempotent: catch this error and continue
- Only issue stop for nodes in a running/active state
Example fix
// before
admin.stop_node(node_id)?;
// after
match admin.stop_node(node_id) {
Ok(_) => {},
Err(e) if e.to_string().contains("already stopped") => {}, // idempotent
Err(e) => return Err(e.into()),
} Defensive patterns
Strategy: try-catch
Validate before calling
fn is_stopped(state: &NodeState) -> bool { matches!(state, NodeState::Stopped) }
// only call stop when !is_stopped(node.state) Type guard
fn as_stopped(state: &NodeState) -> Option<&NodeStopped> {
match state { NodeState::Stopped(s) => Some(s), _ => None }
} Try / catch
match stop_node(node_id) {
Err(CatalogError::NodeAlreadyStopped { .. }) => Ok(()), // idempotent success
r => r,
} Prevention
- Make stop operations idempotent by catching this error as success
- Query node state before issuing stop commands
- Avoid concurrent stop requests from multiple operators
When it happens
Trigger: Calling node stop (e.g. `stop_node` or the corresponding admin HTTP endpoint) for a node whose catalog state is already `stopped`.
Common situations: Retrying a stop command after a first successful attempt; orchestration scripts with stale views of node state; concurrent operators issuing the same stop command.
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
- node ' ' is not fully stopped (current state: ); run "stop…
- idempotent no-op
- {0}
- Adding a new database would exceed limit of
- attempted to create a resource that already exists
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/9707b824e77e58a5.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_catalog/src/error.rs:297
#[error("cannot parse token permission, {0}")]
CannotParsePermissionForToken(String),
#[error("token name already exists, {0}")]
TokenNameAlreadyExists(String),
#[error("token hash already exists")]
TokenHashAlreadyExists,
#[error("missing admin token, cannot update")]
MissingAdminTokenToUpdate,
#[error("cannot delete internal db")]
CannotDeleteInternalDatabase,
#[error("cannot modify internal db")]
CannotModifyInternalDatabase,
#[error("tried to stop a node ({node_id}) that is already stopped")]
NodeAlreadyStopped { node_id: Arc<str> },
#[error(
"node '{node_id}' is not fully stopped (current state: {current_state}); run \"stop node\" first"
)]
NodeNotFullyStopped {
node_id: Arc<str>,
current_state: &'static str,
},
#[error("node '{node_id}' has compact mode and cannot be removed")]
NodeModeNotRemovable { node_id: Arc<str> },
#[error("invalid stop ack for node '{node_id}' (current state: {current_state})")]
InvalidStopAck {
node_id: Arc<str>,
current_state: &'static str,
},View on GitHub (pinned to 06200ef96b)