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

  1. Treat the node as already stopped and proceed — no action needed
  2. Check node state (`influxdb3 show nodes`) before issuing stop
  3. Make orchestration idempotent: catch this error and continue
  4. 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

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


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)