{"record":{"id":"b30d1902ea465b9e","repo":"influxdata/influxdb","slug":"join-error-please-report-0","errorCode":null,"errorMessage":"Join error, please report: {0}","messagePattern":"Join error, please report: (.+?)","errorType":"exception","errorClass":"PluginError","httpStatus":null,"severity":"error","filePath":"influxdb3_processing_engine/src/plugins.rs","lineNumber":73,"sourceCode":"\n    #[error(\"invalid cron syntax: {0}\")]\n    InvalidCronSyntax(#[from] cron::error::Error),\n\n    #[error(\"cron schedule never triggers: {0}\")]\n    CronScheduleNeverTriggers(String),\n\n    #[error(\"non-schedule plugin with schedule trigger: {0}\")]\n    NonSchedulePluginWithScheduleTrigger(String),\n\n    #[error(\"error fetching plugin from repository: {0} {1}\")]\n    FetchingFromRepository(reqwest::StatusCode, String),\n\n    #[error(\n        \"plugin installation is disabled; plugins must already exist in the configured plugin directory\"\n    )]\n    PluginInstallationDisabled,\n\n    #[error(\"Join error, please report: {0}\")]\n    JoinError(#[from] tokio::task::JoinError),\n\n    #[error(\"Node not configured with plugin directory\")]\n    NoPluginDir,\n\n    #[error(\n        \"Path traversal detected: plugin filename '{0}' attempts to access files outside the plugin directory\"\n    )]\n    PathTraversal(String),\n}\n\n#[derive(Debug, Clone)]\npub struct ProcessingEngineEnvironmentManager {\n    pub plugin_dir: Option<PathBuf>,\n    pub virtual_env_location: Option<PathBuf>,\n    pub package_manager: Arc<dyn PythonEnvironmentManager>,\n    pub plugin_dir_only: bool,\n    pub plugin_repo: Option<String>,","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_processing_engine/src/plugins.rs#L55-L91","documentation":"PluginError::JoinError wraps a tokio::task::JoinError from awaiting a spawned task in the processing engine; the message includes a 'please report' hint because the library treats it as an unexpected internal failure (tasks are not expected to panic or be cancelled).","triggerScenarios":"Awaiting JoinHandle of a spawned plugin-execution task that panicked (bug in plugin runtime, OOM abort of the task) or was cancelled while the scheduler awaited its result.","commonSituations":"A Python plugin panics inside the interpreter; runtime aborts during shutdown while tasks still running; underlying runtime shutdown race.","solutions":["Inspect the embedded JoinError to find the task's panic message and fix the plugin code that panicked.","Re-run the trigger; transient cancellation usually succeeds on retry.","If reproducible, report it upstream as an internal invariant violation per the message."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match result {\n    Err(PluginError::JoinError(e)) => {\n        log::error!(\"spawned plugin task failed: {e}\");\n        retry_trigger_once()\n    }\n    other => other,\n}","preventionTips":["Harden plugin code against panics (validate inputs inside the plugin).","Ensure graceful shutdown cancels tasks before runtime teardown.","Monitor for recurring panics; treat repeats as bugs to report upstream."],"tags":["tokio","async","panic"],"backgroundTag":"thread-interrupted","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}