influxdata/influxdb · error · PluginError
shouldn't have request path trigger for scheduled plugin
Error message
shouldn't have request path trigger for scheduled plugin
What it means
Raised by ScheduleRunner::try_new when a scheduled plugin is constructed with a RequestPath trigger specification. Scheduled plugins cannot be invoked via HTTP request-path triggers; only request-path-capable plugins may use that spec.
Solutions
- Use a Schedule trigger spec with a cron expression for this plugin.
- If HTTP invocation is needed, register the plugin as a request-path plugin instead.
- Correct the CREATE TRIGGER statement to drop the request-path spec.
Example fix
// before CREATE TRIGGER "t" AT GET /write // for a scheduled plugin // after CREATE TRIGGER "t" ... SCHEDULE '0 * * * *'
Defensive patterns
Strategy: validation
Validate before calling
fn request_path_allowed(spec: &TriggerSpecificationDefinition, plugin_kind: PluginKind) -> bool {
!matches!(spec, TriggerSpecificationDefinition::RequestPath { .. }) || plugin_kind == PluginKind::Request
} Prevention
- Reserve RequestPath specs for request-capable plugins.
- Use SCHEDULE specs for cron-driven plugins.
- Add CLI/UI validation preventing mismatched trigger-plugin combinations.
When it happens
Trigger: Calling try_new with TriggerSpecificationDefinition::RequestPath for a scheduled plugin.
Common situations: Admin creates a trigger binding a scheduled plugin to an API endpoint path; confusion between request-trigger plugins and cron plugins.
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
- Cannot parse the given human time
- shouldn't have table trigger for scheduled plugin
- arrow error
- Authorization header was malformed, the request was not in…
- body content is not valid utf8
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/390aba0ed1ef72f4.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_processing_engine/src/plugins.rs:175
}
struct ScheduleTriggerRunner {
schedule: Schedule,
next_trigger_time: Option<DateTime<Utc>>,
}
impl ScheduleTriggerRunner {
fn try_new(
trigger_spec: &TriggerSpecificationDefinition,
time_provider: Arc<dyn TimeProvider>,
) -> Result<Self, PluginError> {
match trigger_spec {
TriggerSpecificationDefinition::AllTablesWalWrite
| TriggerSpecificationDefinition::SingleTableWalWrite { .. } => {
Err(anyhow!("shouldn't have table trigger for scheduled plugin").into())
}
TriggerSpecificationDefinition::RequestPath { .. } => {
Err(anyhow!("shouldn't have request path trigger for scheduled plugin").into())
}
TriggerSpecificationDefinition::Schedule { schedule } => {
let schedule = CronSchedule::from_str(schedule.as_str())
.context("cron schedule should be parsable")?;
Ok(Self::new_cron(schedule, time_provider))
}
TriggerSpecificationDefinition::Every { duration } => {
// check that duration isn't longer than a year, so we avoid overflows.
if *duration > parse_duration("1 year").unwrap() {
return Err(anyhow!("schedule duration cannot be greater than 1 year").into());
}
Ok(Self::new_every(
Duration::from_std(*duration)
.context("should be able to convert durations. ")?,
time_provider,
))
}
}View on GitHub (pinned to 06200ef96b)