{"record":{"id":"ee6180442753c7b1","repo":"influxdata/influxdb","slug":"invalid-namespace-namespace-reason","errorCode":null,"errorMessage":"Invalid namespace '{namespace}': {reason}","messagePattern":"Invalid namespace '(.+?)': (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"core/client_util/src/namespace_translation.rs","lineNumber":9,"sourceCode":"//! Contains logic to map namespace back/forth to org/bucket\n\nuse thiserror::Error;\n\n/// Errors returned by namespace parsing\n#[expect(missing_docs)]\n#[derive(Debug, Error)]\npub enum Error {\n    #[error(\"Invalid namespace '{namespace}': {reason}\")]\n    InvalidNamespace { namespace: String, reason: String },\n}\n\nimpl Error {\n    fn new(namespace: impl Into<String>, reason: impl Into<String>) -> Self {\n        Self::InvalidNamespace {\n            namespace: namespace.into(),\n            reason: reason.into(),\n        }\n    }\n}\n\n/// Splits up the namespace name into org_id and bucket_id\npub fn split_namespace(namespace: &str) -> Result<(&str, &str), Error> {\n    let mut iter = namespace.split('_');\n    let org_id = iter.next().ok_or_else(|| Error::new(namespace, \"empty\"))?;\n\n    if org_id.is_empty() {","sourceCodeStart":1,"sourceCodeEnd":27,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/core/client_util/src/namespace_translation.rs#L1-L27","documentation":"PluginError::ReadPluginError wraps std::io::Error and is raised when the server cannot read the plugin's Python file from disk. The message interpolates the underlying IO error. It occurs while loading plugin code before execution, so the plugin never runs.","triggerScenarios":"Creating/enabling/triggering a plugin whose file path does not exist, is unreadable (permissions), is a directory, or lives on a volume not mounted in the container. Also when the plugin directory configured for the server doesn't contain the referenced file.","commonSituations":"Kubernetes/container deployments where the host-mounted plugin dir isn't mounted into the pod; typo'd absolute path; file deleted after trigger registration; permission denied after running the server as a different user.","solutions":["Verify the plugin file path exists on the server host: `ls -l /path/to/plugin.py`.","Mount the plugin directory into the container and restart (e.g. docker -v / k8s volumeMount).","Fix file permissions so the server process user can read the file.","Point the trigger at the correct absolute path inside the container, not the host path."],"exampleFix":"// before\ninfluxdb3 trigger create ... /host/plugins/my_plugin.py  # path absent in container\n// after\ndocker run -v /host/plugins:/plugins ... \ninfluxdb3 trigger create ... /plugins/my_plugin.py","handlingStrategy":"validation","validationCode":"# on the server host/container, before creating the trigger\ntest -r /plugins/my_plugin.py && echo ok || echo \"missing or unreadable plugin file\"","typeGuard":"fn plugin_readable(path: &Path) -> bool { path.is_file() && File::open(path).is_ok() }","tryCatchPattern":"match result {\n    Err(PluginError::ReadPluginError(io)) => error!(\"cannot read plugin file: {io}; check path/mount/perms\"),\n    Ok(v) => v,\n}","preventionTips":["Use paths valid inside the container, not the host.","Mount the plugin directory as a volume in k8s/docker.","Check file readability for the server's process user.","Keep plugin files immutable after trigger registration or re-register on change."],"tags":["plugin","io","file-read","filesystem"],"backgroundTag":"file-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"}