{"record":{"id":"4623a80fa0e68e5f","repo":"influxdata/influxdb","slug":"unexpectedly-found-scheduled-trigger-specification-cron","errorCode":null,"errorMessage":"unexpectedly found scheduled trigger specification cron:{schedule} for WAL plugin {trigger_name}","messagePattern":"unexpectedly found scheduled trigger specification cron:(.+?) for WAL plugin (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"influxdb3_processing_engine/src/worker/local.rs","lineNumber":567,"sourceCode":"    }\n\n    /// Get the table filter for WAL flush triggers.\n    ///\n    /// Returns `Ok(None)` for all-tables triggers, `Ok(Some(table_id))` for single-table triggers,\n    /// or an error if the trigger specification is not valid for WAL flush (e.g., scheduled triggers).\n    fn make_wal_table_filter(\n        &self,\n        schema: &influxdb3_catalog::catalog::DatabaseSchema,\n    ) -> Result<Option<influxdb3_id::TableId>, PluginError> {\n        match &self.trigger_definition.trigger {\n            TriggerSpecificationDefinition::AllTablesWalWrite => Ok(None),\n            TriggerSpecificationDefinition::SingleTableWalWrite { table_name } => {\n                let table_id = schema\n                    .table_name_to_id(table_name)\n                    .context(\"table not found\")?;\n                Ok(Some(table_id))\n            }\n            TriggerSpecificationDefinition::Schedule { schedule } => Err(anyhow!(\n                \"unexpectedly found scheduled trigger specification cron:{} for WAL plugin {}\",\n                schedule,\n                self.trigger_definition.trigger_name\n            )\n            .into()),\n            TriggerSpecificationDefinition::Every { duration } => Err(anyhow!(\n                \"unexpectedly found every trigger specification every:{} for WAL plugin {}\",\n                format_duration(*duration),\n                self.trigger_definition.trigger_name\n            )\n            .into()),\n            TriggerSpecificationDefinition::RequestPath { path } => Err(anyhow!(\n                \"unexpectedly found request path trigger specification {} for WAL plugin {}\",\n                path,\n                self.trigger_definition.trigger_name\n            )\n            .into()),\n        }","sourceCodeStart":549,"sourceCodeEnd":585,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_processing_engine/src/worker/local.rs#L549-L585","documentation":"`make_wal_table_filter` builds the table filter for WAL-triggered plugins and only accepts WAL-compatible trigger specifications. A `Schedule { cron }` specification on a WAL plugin is an internal invariant violation — cron triggers don't run per WAL flush — so this error flags a misconfigured trigger.","triggerScenarios":"Executing a WAL-type trigger (`execute_wal_once`) whose trigger specification was created as `Schedule { schedule }` — e.g. a trigger created with `AT cron '...'` but bound to a WAL plugin type.","commonSituations":"Creating a trigger with the wrong trigger specification: cron schedule paired with a single-table-WAL plugin; catalog corrupted by manual edits or a bug allowing incompatible spec/plugin combinations.","solutions":["Recreate the trigger with a matching specification: use `SINGLE TABLE WAL WRITE` style spec for WAL plugins, cron for scheduled plugins.","Check the trigger's specification with `SHOW TRIGGERS` and align it with the plugin type.","Verify how the trigger was created — the CREATE TRIGGER statement should not combine `AT cron` with a WAL plugin."],"exampleFix":"// before\nCREATE TRIGGER \"wal_trig\" ON db PROCESSING ENGINE PLUGIN wal_plugin AT cron '* * * * *'\n// after\nCREATE TRIGGER \"wal_trig\" ON db PROCESSING ENGINE PLUGIN wal_plugin FOREACH ROW","handlingStrategy":"validation","validationCode":"// Validate spec/plugin pairing before CREATE TRIGGER\nif matches!(spec, TriggerSpecificationDefinition::Schedule{..} | TriggerSpecificationDefinition::Every{..})\n    && plugin_type.requires_wal_trigger() {\n    return Err(anyhow!(\"WAL plugins require a WAL trigger specification\"));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never combine cron/EVERY specifications with WAL plugins","Validate trigger DDL against plugin requirements in tooling","Review SHOW TRIGGERS output after automated provisioning"],"tags":["wal","triggers","misconfiguration","invariant"],"backgroundTag":"internal-invariant-violation","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"}