{"record":{"id":"2c471040df7a7acd","repo":"vectordotdev/vector","slug":"input-driver-task-should-not-have-panicked","errorCode":null,"errorMessage":"input driver task should not have panicked","messagePattern":"input driver task should not have panicked","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/components/validation/runner/mod.rs","lineNumber":357,"sourceCode":"                output_rx,\n                &runner_metrics,\n                maybe_runner_encoder.as_ref().cloned(),\n                self.configuration.component_type,\n                expected_output_events,\n            );\n\n            // At this point, the component topology is running, and all input/output/telemetry\n            // tasks are running as well. Our input driver should be sending (or will have already\n            // sent) all of the input events, which will cascade through the component topology as\n            // they're processed.\n            //\n            // We'll trigger each phase to shutdown, in order, to deterministically ensure each\n            // section has completed. We additionally wait for the input driver task to complete\n            // first, and the output driver task to complete last, as those tasks are freerunning\n            // and don't require special shutdown coordination.\n            input_driver\n                .await\n                .expect(\"input driver task should not have panicked\");\n\n            // Synchronize the shutdown of all tasks, and get the resulting output events.\n            // We drive the shutdown by ensuring that the output events have been\n            // processed by the external resource, which ensures that the input events have travelled\n            // all the way through the pipeline, and that the telemetry events have been processed\n            // before shutting down the telemetry and topology tasks.\n            input_task_coordinator.shutdown().await;\n\n            let output_events = output_driver\n                .await\n                .expect(\"output driver task should not have panicked\");\n\n            // Now that all output events have been received, we can shutdown the controlled edge/sink\n            output_task_coordinator.shutdown().await;\n\n            // as well as the telemetry and topology\n            telemetry_task_coordinator.shutdown().await;\n            topology_task_coordinator.shutdown().await;","sourceCodeStart":339,"sourceCodeEnd":375,"githubUrl":"https://github.com/vectordotdev/vector/blob/bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013/src/components/validation/runner/mod.rs#L339-L375","documentation":"run_validation joins the input driver task and expects it to have completed without panicking. Since the JoinHandle::await returns Err only when the task panicked, this panic means the input driver (which feeds synthetic events into the pipeline) crashed — the expect converts that panic into a fatal error in the validation run.","triggerScenarios":"The future driving input events (synthetic input, interlinger/Loops-style generator) panics — e.g. division by zero in a batching config, unreachable socket for a client driver, or an assertion inside the input generator.","commonSituations":"Invalid input parameters (event rate, format) that a generator asserts on; connecting to an input endpoint that rejected/dropped the client; generator code regression after a refactor.","solutions":["Look at the panic message printed by the joined task above this expect to find the root cause.","Fix the input configuration (event format, target address, rate) that made the driver panic.","Temporarily capture the JoinError with into_result() to log driver output before failing."],"exampleFix":"// before\ninput_driver.await.expect(\"input driver task should not have panicked\");\n// after\nif let Err(e) = input_driver.await { panic!(\"input driver panicked: {e}\"); }","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match input_driver.await {\n    Ok(()) => (),\n    Err(join_err) => panic!(\"input driver panicked: {join_err}\"),\n}","preventionTips":["Validate input driver parameters (rates, formats, endpoints) before starting the run.","Check for panics in generator code after refactors; capture JoinError details in logs.","Use reachable literal-IP endpoints for the input driver's target."],"tags":["tokio","task-panic","validation","join"],"backgroundTag":"thread-interrupted","analyzedSha":"bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013","analyzedAt":"2026-09-16T02:53:35.741Z","contentChangedAt":"2026-09-16T02:53:35.741Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}