influxdata/influxdb · error · InvalidEndpoint

Invalid endpoint

Error message

Invalid endpoint: {url}

What it means

ProcessingEngineError::TriggerNotFound is raised when the processing engine manager cannot find a trigger with the given TriggerId registered under the given database (DbId). The library throws it during trigger lookup/operations (e.g. enable/disable/delete or fetch) when the trigger identifier supplied does not exist in that database. It means the caller referenced a trigger that was never created or has since been removed.

Solutions

  1. List the existing triggers for the database (catalog/API) and confirm the exact trigger_id before retrying.
  2. Verify you are targeting the correct database (db_id); triggers are scoped per database.
  3. If the trigger should exist, re-create it with the processing engine trigger creation API/`CREATE TRIGGER`.
  4. Check whether the trigger was deleted (e.g. by another process or `DROP TRIGGER`) and re-register it.

Example fix

// before
manager.disable_trigger(db_id, trigger_id).await?;
// after
match manager.get_trigger(db_id, &trigger_id) {
    Some(_) => manager.disable_trigger(db_id, trigger_id).await?,
    None => eprintln!("trigger {trigger_id} does not exist in {db_id}; create it first"),
}
Defensive patterns

Strategy: try-catch

Validate before calling

let exists = list_triggers(db_id).await?.iter().any(|t| t.id == trigger_id);
if !exists { return Err(format!("trigger {trigger_id} missing in {db_id}")); }

Type guard

fn trigger_exists(triggers: &[Trigger], id: TriggerId) -> bool { triggers.iter().any(|t| t.id == id) }

Try / catch

match res {
    Err(ProcessingEngineError::TriggerNotFound { db_id, trigger_id }) => warn!("trigger {trigger_id:?} absent in {db_id:?}, skipping"),
    Err(e) => return Err(e),
    Ok(v) => v,
}

Prevention

When it happens

Trigger: Calling ProcessingEngineManager methods that take a trigger_id and db_id (e.g. disabling, enabling, deleting, or fetching a trigger) when no trigger with that TriggerId is registered for that database in the catalog.

Common situations: Typo'd trigger name/ID from a CLI command or HTTP API call; the trigger was deleted on another node; querying the wrong database; the trigger definition was dropped after a catalog migration or restart.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/65be53861d947c6d. Report an issue: GitHub.

Appendix: source

Thrown at core/catalog_cache/src/api/client.rs:81

    put_request_timeout: Duration,
    list_request_timeout: Duration,
    endpoint: Url,
    registry: Arc<metric::Registry>,
}

impl CatalogCacheClientBuilder {
    /// Build client.
    pub fn build(self) -> Result<CatalogCacheClient> {
        let Self {
            connect_timeout,
            get_request_timeout,
            put_request_timeout,
            list_request_timeout,
            endpoint,
            registry,
        } = self;

        ensure!(
            endpoint.path().is_empty() || endpoint.path() == "/",
            InvalidEndpointSnafu {
                url: endpoint.clone()
            },
        );
        ensure!(
            endpoint.query().is_none(),
            InvalidEndpointSnafu {
                url: endpoint.clone()
            },
        );
        ensure!(
            endpoint.fragment().is_none(),
            InvalidEndpointSnafu {
                url: endpoint.clone()
            },
        );

View on GitHub (pinned to 06200ef96b)