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
- Skip HTTP-client-based validation for scrape-style sinks; validate prometheus_exporter with integration tests instead
- Restrict validation resources to push-based HTTP configs the framework supports
- 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
- Validate scrape-style sinks (prometheus_exporter) with integration tests, not the validation framework
- Only attach push-based HTTP validation resources
- Check sink docs for scrape vs push semantics before validating
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
- Failed to bind to listen address.
- should not fail to build request
- should not fail to convert method to method filter
- should not fail to send output event
- a valid HTTP/1 URI is valid as an HTTP URI
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)