influxdata/influxdb · error · PluginError

non-schedule plugin with schedule trigger

Error message

non-schedule plugin with schedule trigger: {0}

What it means

PluginError::NonSchedulePluginWithScheduleTrigger is thrown when a trigger attempts to attach a cron/schedule trigger specification to a plugin that is not a schedule-type plugin. The processing engine only permits Schedule trigger specs for schedule-capable plugins.

Solutions

  1. Use the matching trigger type: table trigger (ALL TABLES / table name) or request path trigger for non-schedule plugins.
  2. Register the plugin as a scheduled plugin if cron invocation is desired.
  3. Update the CREATE TRIGGER statement to remove SCHEDULE and specify the correct trigger spec.

Example fix

// before
CREATE TRIGGER "t" ON ALL TABLES ... SCHEDULE '0 * * * *'
// after
CREATE TRIGGER "t" ON ALL TABLES ... FOR EACH ROW  // table plugin
// or write a scheduled plugin and use: ... SCHEDULE '0 * * * *'
Defensive patterns

Strategy: validation

Validate before calling

fn trigger_matches_plugin(plugin_type: &str, trigger_spec: &str) -> bool {
    match (plugin_type, trigger_spec) {
        ("scheduled", "schedule") | ("wal", "table") | ("request", "request-path") => true,
        _ => false,
    }
}

Type guard

fn expects_schedule_trigger(plugin_kind: PluginKind) -> bool { matches!(plugin_kind, PluginKind::Scheduled) }

Prevention

When it happens

Trigger: Calling the plugin/trigger creation API (plugins.rs try_new / scheduler wiring) with TriggerSpecificationDefinition::Schedule for a plugin registered as a WAL-table or request-path plugin.

Common situations: Admins create a trigger with SCHEDULE syntax for a plugin written for WAL writes or HTTP request invocation; mismatch between plugin type and trigger spec in CREATE TRIGGER statements.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/06f69acde0c8f839. Report an issue: GitHub.

Appendix: source

Thrown at influxdb3_processing_engine/src/plugins.rs:62

    #[error(transparent)]
    WriteBufferError(#[from] write_buffer::Error),

    #[error(transparent)]
    AnyhowError(#[from] anyhow::Error),

    #[error("reading plugin file: {0}")]
    ReadPluginError(#[from] std::io::Error),

    #[error("error executing plugin: {0}")]
    PluginExecutionError(#[from] influxdb3_py_api::error::ExecutePluginError),

    #[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"

View on GitHub (pinned to 06200ef96b)