influxdata/influxdb · error · PluginError
Join error, please report
Error message
Join error, please report: {0} What it means
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).
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.
Defensive patterns
Strategy: retry
Try / catch
match result {
Err(PluginError::JoinError(e)) => {
log::error!("spawned plugin task failed: {e}");
retry_trigger_once()
}
other => other,
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: A Python plugin panics inside the interpreter; runtime aborts during shutdown while tasks still running; underlying runtime shutdown race.
Related errors
- Failed to update table index: join task failed
- Failed to update table index: join task failed
- join error
- request trigger execution cancelled
- snapshot manifest parse task panicked
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/b30d1902ea465b9e.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_processing_engine/src/plugins.rs:73
#[error("invalid cron syntax: {0}")]
InvalidCronSyntax(#[from] cron::error::Error),
#[error("cron schedule never triggers: {0}")]
CronScheduleNeverTriggers(String),
#[error("non-schedule plugin with schedule trigger: {0}")]
NonSchedulePluginWithScheduleTrigger(String),
#[error("error fetching plugin from repository: {0} {1}")]
FetchingFromRepository(reqwest::StatusCode, String),
#[error(
"plugin installation is disabled; plugins must already exist in the configured plugin directory"
)]
PluginInstallationDisabled,
#[error("Join error, please report: {0}")]
JoinError(#[from] tokio::task::JoinError),
#[error("Node not configured with plugin directory")]
NoPluginDir,
#[error(
"Path traversal detected: plugin filename '{0}' attempts to access files outside the plugin directory"
)]
PathTraversal(String),
}
#[derive(Debug, Clone)]
pub struct ProcessingEngineEnvironmentManager {
pub plugin_dir: Option<PathBuf>,
pub virtual_env_location: Option<PathBuf>,
pub package_manager: Arc<dyn PythonEnvironmentManager>,
pub plugin_dir_only: bool,
pub plugin_repo: Option<String>,View on GitHub (pinned to 06200ef96b)