vectordotdev/vector · error

should not fail to send output event

Error message

should not fail to send output event

What it means

The validation output HTTP server collects the events a component emitted and forwards them to the test harness via an mpsc `output_tx.send(...).await`, expecting the receiving half to still be alive. A panic here means the channel receiver was dropped while the HTTP server was still delivering results — the harness shut down unexpectedly.

Solutions

  1. Check the validation run logs for an earlier harness panic/timeout that shut the receiver down early
  2. Ensure the component under test stops sending output before the test concludes (no trailing async emits)
  3. Increase test timeouts if the component's output delivery races with harness shutdown
  4. Update Vector and report if reproducible
Defensive patterns

Strategy: try-catch

Try / catch

// On the harness side, keep the receiver alive for the whole server lifetime
// and tolerate late sends:
while let Some(events) = output_rx.recv().await {
    if harness_active { record(events); }
}

Prevention

When it happens

Trigger: `spawn_output_http_server` processing a component's POST of output events, then trying to send the events over the internal channel after the harness's receiver was dropped (test completed/aborted or panicked concurrently).

Common situations: The component under test sends output after the validation run finished; a crash/timeout elsewhere in the harness dropped the receiver first; test-case timing issues causing late deliveries.

Related errors


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

Appendix: source

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

                                            // Update the runner metrics for the received events. This will later
                                            // be used in the Validators, as the "expected" case.
                                            output_runner_metrics.received_bytes_total +=
                                                byte_size as u64;

                                            output_runner_metrics.received_events_total +=
                                                events.len() as u64;

                                            events.iter().for_each(|event| {
                                                output_runner_metrics.received_event_bytes_total +=
                                                    event.estimated_json_encoded_size_of().get()
                                                        as u64;
                                            });

                                            output_tx
                                                .send(events.to_vec())
                                                .await
                                                .expect("should not fail to send output event");
                                        }
                                    }
                                    Ok(None) => {
                                        if should_reject {
                                            // This status code is not retried and should result in the component under test
                                            // emitting error events
                                            return StatusCode::BAD_REQUEST.into_response();
                                        } else {
                                            return StatusCode::OK.into_response();
                                        }
                                    }
                                    Err(_) => {
                                        error!(
                                            "HTTP server failed to decode body: {:?}",
                                            String::from_utf8_lossy(&body)
                                        );
                                        return StatusCode::INTERNAL_SERVER_ERROR.into_response();
                                    }

View on GitHub (pinned to bdb87aeaa4)