{"record":{"id":"1b0e78259bf94bcb","repo":"influxdata/influxdb","slug":"cron-schedule-never-triggers-0","errorCode":null,"errorMessage":"cron schedule never triggers: {0}","messagePattern":"cron schedule never triggers: (.+?)","errorType":"validation","errorClass":"PluginError","httpStatus":null,"severity":"error","filePath":"influxdb3_processing_engine/src/plugins.rs","lineNumber":59,"sourceCode":"    #[error(transparent)]\n    PyError(#[from] pyo3::PyErr),\n\n    #[error(transparent)]\n    WriteBufferError(#[from] write_buffer::Error),\n\n    #[error(transparent)]\n    AnyhowError(#[from] anyhow::Error),\n\n    #[error(\"reading plugin file: {0}\")]\n    ReadPluginError(#[from] std::io::Error),\n\n    #[error(\"error executing plugin: {0}\")]\n    PluginExecutionError(#[from] influxdb3_py_api::error::ExecutePluginError),\n\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,","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_processing_engine/src/plugins.rs#L41-L77","documentation":"PluginError::CronScheduleNeverTriggers means a schedule-based processing engine plugin's cron expression parses but never produces a next trigger time (e.g. a date-specific schedule like '0 0 30 2 *' — Feb 30 — or a schedule whose date window has passed). The library throws it when validating or starting a scheduled trigger whose cron cannot ever fire.","triggerScenarios":"Creating or enabling a plugin trigger whose cron string is syntactically valid via the cron crate but yields an empty iterator of trigger times, e.g. day-of-month 30/31 combined with February, or a past-bounded schedule.","commonSituations":"Operators hand-write cron strings in trigger definitions for influxdb3 scheduled plugins and use impossible date combinations; copy-pasted schedules referencing fixed dates that already passed.","solutions":["Fix the cron expression so it can fire, e.g. use '0 0 * 2 *' or a recurring pattern instead of an impossible date like '0 0 30 2 *'.","Validate the schedule with the cron crate (schedule.upcoming(Utc).next()) before creating the trigger.","If a one-time past schedule was intended, recreate the trigger with a future datetime-based schedule."],"exampleFix":"// before\nCREATE TRIGGER \"feb\" ON ... FOR EACH ... SCHEDULE '0 0 30 2 *'\n// after\nCREATE TRIGGER \"feb\" ON ... FOR EACH ... SCHEDULE '0 0 * 2 *'","handlingStrategy":"validation","validationCode":"use cron::Schedule;\nuse chrono::Utc;\nfn schedule_can_fire(expr: &str) -> bool {\n    expr.parse::<Schedule>().ok()\n        .and_then(|s| s.upcoming(Utc).next())\n        .is_some()\n}","typeGuard":"fn is_valid_cron(expr: &str) -> bool { cron::Schedule::from_str(expr).is_ok() }","tryCatchPattern":null,"preventionTips":["Avoid date combinations that never occur (Feb 30/31, etc.).","Test every cron expression against upcoming(Utc).take(1) before creating a trigger.","Prefer recurring patterns over one-shot bounded schedules."],"tags":["cron","scheduling","config"],"backgroundTag":"invalid-date-format","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"}