vectordotdev/vector · error

not implemented

Error message

not implemented

What it means

The validation framework's spawn_output_http_client helper — an HTTP client that pulls events from a sink-driven HTTP server — is a stub that panics with unimplemented!(). It exists only as a placeholder because scraping sinks like prometheus_exporter need special aggregation/deduplication logic that can't be generic.

Solutions

  1. Skip HTTP-client-based validation for scrape-style sinks; validate prometheus_exporter with integration tests instead
  2. Restrict validation resources to push-based HTTP configs the framework supports
  3. Implement spawn_output_http_client with metric aggregation/deduplication logic if generic validation is needed

Example fix

// before
validation:
  http:
    client: true  # triggers spawn_output_http_client for a scrape sink
// after
# validate prometheus_exporter with dedicated integration tests, not the generic validation framework
Defensive patterns

Strategy: validation

Validate before calling

// Skip validation for pull-based (scrape) sinks
fn supports_output_http_validation(is_scrape_style_sink: bool) -> bool {
    !is_scrape_style_sink  // prometheus_exporter-style sinks are unsupported
}

Prevention

When it happens

Trigger: Running component validation against a sink whose HttpResourceConfig requires pull-based (client-side) validation — i.e. a sink exposing an HTTP server to be scraped.

Common situations: Validating the prometheus_exporter sink via `vector validate` / validation resources; attempting pull-style validation of any scrape-based sink.

Related errors


AI-assisted analysis of vectordotdev/vector@bdb87aeaa4 (2026-09-16). Data as JSON: /api/errors/0f0acb456acfe5c1. Report an issue: GitHub.

Appendix: source

Thrown at src/components/validation/resources/http.rs:444

            // signal the server to shutdown
            http_server_shutdown_tx.send(()).ok();

            // mark ourselves as done
            resource_completed.mark_as_done();

            info!("HTTP server external output resource completed.");
        });

        Ok(())
    }

    /// Spawns an HTTP client that pulls events by making requests to an HTTP server driven by a sink.
    fn spawn_output_http_client(&self, _config: HttpResourceConfig) {
        // TODO: The `prometheus_exporter` sink is the only sink that exposes an HTTP server which must be
        // scraped... but since we need special logic to aggregate/deduplicate scraped metrics, we can't
        // use this generically for that purpose.
        unimplemented!()
    }
}

fn spawn_http_server<H, F, R>(
    task_coordinator: &TaskCoordinator<Configuring>,
    config: &HttpResourceConfig,
    runner_metrics: &Arc<Mutex<RunnerMetrics>>,
    handler: H,
) -> (Arc<Notify>, oneshot::Sender<()>)
where
    H: Fn(Request<Body>, Arc<Mutex<RunnerMetrics>>) -> F + Clone + Send + 'static,
    F: Future<Output = R> + Send,
    R: IntoResponse,
{
    let http_server_started = task_coordinator.track_started();
    let http_server_completed = task_coordinator.track_completed();

    let listen_addr = socketaddr_from_uri(&config.uri);

View on GitHub (pinned to bdb87aeaa4)