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

  1. Inspect the embedded JoinError to find the task's panic message and fix the plugin code that panicked.
  2. Re-run the trigger; transient cancellation usually succeeds on retry.
  3. 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

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


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)