{"record":{"id":"0b466fc770a5b1aa","repo":"influxdata/influxdb","slug":"plugin-error-0","errorCode":null,"errorMessage":"plugin error: {0}","messagePattern":"plugin error: (.+?)","errorType":"exception","errorClass":"ProcessingEngineError","httpStatus":null,"severity":"error","filePath":"influxdb3_processing_engine/src/manager.rs","lineNumber":21,"sourceCode":"use influxdb3_id::{DbId, TriggerId};\nuse std::fmt::Debug;\nuse thiserror::Error;\n\n#[derive(Debug, Error)]\npub enum ProcessingEngineError {\n    #[error(\"database not found: {0}\")]\n    DatabaseNotFound(String),\n\n    #[error(\"catalog update error: {0}\")]\n    CatalogUpdateError(#[from] CatalogError),\n\n    #[error(\"write buffer error: {0}\")]\n    WriteBufferError(#[from] influxdb3_write::write_buffer::Error),\n\n    #[error(\"wal error: {0}\")]\n    WalError(#[from] influxdb3_wal::Error),\n\n    #[error(\"plugin error: {0}\")]\n    PluginError(#[from] crate::plugins::PluginError),\n\n    #[error(\"processing engine trigger {trigger_id} not found in database {db_id}\")]\n    TriggerNotFound { db_id: DbId, trigger_id: TriggerId },\n\n    #[error(\"request trigger not found\")]\n    RequestTriggerNotFound,\n\n    #[error(\"request handler for trigger down\")]\n    RequestHandlerDown,\n\n    #[error(\"error installing python packages: {0}\")]\n    PythonPackageError(PluginEnvironmentError),\n\n    #[error(\"{0}\")]\n    PackageInstallationDisabled(PluginEnvironmentError),\n}\n","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_processing_engine/src/manager.rs#L3-L39","documentation":"ProcessingEngineError::PluginError with #[from] crate::plugins::PluginError — automatic conversion of plugin subsystem errors. Any failure inside the plugins module (the anyhow-wrapped errors above, load errors, validation errors) is surfaced as `plugin error: {0}`.","triggerScenarios":"Any processing-engine API path that calls into crate::plugins and returns PluginError: missing plugin dir, plugin not found, invalid plugin file, script load/validation failure.","commonSituations":"Broken Python plugin syntax causing load failure; plugin file removed while triggers still reference it; plugin dir misconfiguration propagating through this wrapper.","solutions":["Parse the inner PluginError message (it wraps the concrete cause, e.g. 'Plugin not found: X').","Fix the underlying plugin issue (restore the file, correct the name, fix plugin code).","Re-upload/redeploy the plugin package if files are missing or stale.","Validate plugin scripts locally (python -m py_compile) before uploading."],"exampleFix":"// before: plugin with syntax error uploaded\n// plugin.py: def process_writes(writes, erro)\n// after\ndef process_writes(writes):\n    ...","handlingStrategy":"try-catch","validationCode":"// validate plugin file before upload\nconst ok = child_process.execSync(`python -m py_compile ${pluginPath}`).status === 0;","typeGuard":null,"tryCatchPattern":"try {\n  await callEngineApi();\n} catch (e) {\n  if (String(e).startsWith('plugin error')) {\n    throw new Error(`Plugin subsystem failed: ${e.message.replace('plugin error: ', '')}`);\n  } else { throw e; }\n}","preventionTips":["Lint/compile plugin scripts before uploading.","Keep plugin files and trigger definitions in sync (deploy via replace_plugin_directory atomically).","Log the inner PluginError detail — it names the concrete cause."],"tags":["processing-engine","plugin","thiserror"],"backgroundTag":"entity-not-found","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"}