{"record":{"id":"f784622547c58482","repo":"influxdata/influxdb","slug":"unexpectedly-found-request-path-trigger-specification-path","errorCode":null,"errorMessage":"unexpectedly found request path trigger specification {path} for WAL plugin {trigger_name}","messagePattern":"unexpectedly found request path trigger specification (.+?) for WAL plugin (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"influxdb3_processing_engine/src/worker/local.rs","lineNumber":579,"sourceCode":"            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        }\n    }\n\n    fn log_return_state_errors(\n        &self,\n        logger: &ProcessingEngineLogger,\n        errors: &[anyhow::Error],\n        context: &str,\n    ) {\n        for error in errors {\n            logger.log(\n                LogLevel::Error,\n                format!(\"error running {context}: {error:#}\"),","sourceCodeStart":561,"sourceCodeEnd":597,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_processing_engine/src/worker/local.rs#L561-L597","documentation":"In the InfluxDB 3 Processing Engine, WAL triggers must use the 'every: <duration>' schedule form. When building the table filter for a WAL plugin run (make_wal_table_filter), the worker encountered a trigger whose TriggerSpecificationDefinition is a RequestPath instead of an Every-cron/duration form. This is an internal invariant violation: WAL workers should only ever be dispatched for WAL-compatible triggers, so a request-path trigger reaching this code path indicates a trigger routing or configuration bug.","triggerScenarios":"A trigger created with 'CREATE TRIGGER ... WHEN ... INSTEAD OF request' (TriggerSpecificationDefinition::RequestPath) is somehow processed by the local WAL worker's execute_wal_once path, i.e. the WAL run loop attempts to build a table filter for a trigger that is not WAL-scheduled.","commonSituations":"A plugin developer or operator creates a request-path trigger (e.g. via HTTP trigger specification) but the internal scheduler/worker routing incorrectly hands it to the WAL worker, often after upgrading, migrating trigger definitions between node versions, or a bug in trigger dispatch. Not something end users hit through normal API use.","solutions":["Check that the trigger was created with the correct trigger specification: WAL plugins should use 'every' (scheduled) triggers, e.g. CREATE TRIGGER ... EVERY 1h.","Inspect the trigger definition in the catalog and delete/recreate any trigger that was created with a request-path spec but registered for WAL processing.","Verify all InfluxDB 3 node versions in the cluster are consistent; upgrade/mixed versions can mismatch trigger specification routing.","If reproducible, report a bug with the trigger definition — this path indicates an internal invariant violation, not user input validation."],"exampleFix":"-- before\nCREATE TRIGGER \"wal-trig\" ON DATABASE mydb FOR EACH WRITE WHEN * INSTEAD OF request ...\n-- after\nCREATE TRIGGER \"wal-trig\" ON DATABASE mydb FOR EACH WRITE WHEN * EVERY 1h ...","handlingStrategy":"validation","validationCode":"// Only create WAL triggers with an 'every' specification\nif (trigger.specification.type !== \"every\") {\n  throw new Error(`Trigger ${trigger.name} must use EVERY spec for WAL plugins, got: ${trigger.specification.type}`);\n}","typeGuard":"fn is_wal_trigger(spec: &TriggerSpecificationDefinition) -> bool {\n    matches!(spec, TriggerSpecificationDefinition::Every { .. })\n}","tryCatchPattern":null,"preventionTips":["Always create WAL plugin triggers with EVERY <duration> specifications","Audit trigger definitions in the catalog after version upgrades","Keep all node versions in a cluster consistent","Report internal dispatch bugs with the full trigger definition"],"tags":["rust","processing-engine","wal","trigger-configuration"],"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"}