influxdata/influxdb · error · QueryEndpointError

QueryEndpoint::query is not implemented

Error message

QueryEndpoint::query is not implemented

What it means

`QueryEndpoint::query` in the processing engine is a stub that always returns `QueryEndpointError::Fail` wrapping an `io::ErrorKind::Unsupported` error. The processing-engine plugin runtime cannot execute SQL queries through this endpoint; any plugin calling `query()` on it will receive this failure.

Solutions

  1. Use the plugin's HTTP client to query the server's HTTP query API (e.g. POST /api/v3/query_sql) instead of `QueryEndpoint::query`.
  2. Upgrade to a version/build where the query endpoint is implemented, if available.
  3. Restructure the plugin to avoid inline queries — pass the needed data in trigger input instead.

Example fix

// before
let batches = endpoint.query("mydb", "SELECT * FROM t", &params)?;
// after
let resp = http.post("http://localhost:8181/api/v3/query_sql")
    .body("db=mydb&q=SELECT%20*%20FROM%20t").send()?;
Defensive patterns

Strategy: try-catch

Try / catch

// Python plugin
try:
    batches = endpoint.query(db, sql, params)
except QueryEndpointError as e:
    log.error("QueryEndpoint unavailable, falling back to HTTP: %s", e)
    batches = query_via_http_api(db, sql)

Prevention

When it happens

Trigger: Any Python plugin invoking `query` on the `QueryEndpoint` provided to request/WAL plugins, regardless of the database, query text, or parameters.

Common situations: Plugin authors trying to query data inside a processing-engine trigger; following older plugin tutorials that assumed query support; the query path was never wired up in this build.

Related errors


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

Appendix: source

Thrown at influxdb3_processing_engine/src/query.rs:69

        Ok(batches)
    }
}

/// [`QueryEndpoint`] that is unimplemented.
#[derive(Debug, Clone, Copy, Default)]
pub struct UnimplementedQueryEndpoint;

#[async_trait]
impl QueryEndpoint for UnimplementedQueryEndpoint {
    async fn query(
        &self,
        _db: &str,
        query: &str,
        _params: &HashMap<String, String>,
    ) -> Result<Vec<RecordBatch>, QueryEndpointError> {
        Err(QueryEndpointError::Fail {
            query: query.to_owned(),
            err: Box::new(std::io::Error::new(
                std::io::ErrorKind::Unsupported,
                "QueryEndpoint::query is not implemented",
            )),
        })
    }
}

View on GitHub (pinned to 06200ef96b)