influxdata/influxdb · error · Error
Invalid namespace
Error message
Invalid namespace '{namespace}': {reason} What it means
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.
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.
Example fix
// before influxdb3 trigger create ... /host/plugins/my_plugin.py # path absent in container // after docker run -v /host/plugins:/plugins ... influxdb3 trigger create ... /plugins/my_plugin.py
Defensive patterns
Strategy: validation
Validate before calling
# on the server host/container, before creating the trigger test -r /plugins/my_plugin.py && echo ok || echo "missing or unreadable plugin file"
Type guard
fn plugin_readable(path: &Path) -> bool { path.is_file() && File::open(path).is_ok() } Try / catch
match result {
Err(PluginError::ReadPluginError(io)) => error!("cannot read plugin file: {io}; check path/mount/perms"),
Ok(v) => v,
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/ee6180442753c7b1.
Report an issue: GitHub.
Appendix: source
Thrown at core/client_util/src/namespace_translation.rs:9
//! Contains logic to map namespace back/forth to org/bucket
use thiserror::Error;
/// Errors returned by namespace parsing
#[expect(missing_docs)]
#[derive(Debug, Error)]
pub enum Error {
#[error("Invalid namespace '{namespace}': {reason}")]
InvalidNamespace { namespace: String, reason: String },
}
impl Error {
fn new(namespace: impl Into<String>, reason: impl Into<String>) -> Self {
Self::InvalidNamespace {
namespace: namespace.into(),
reason: reason.into(),
}
}
}
/// Splits up the namespace name into org_id and bucket_id
pub fn split_namespace(namespace: &str) -> Result<(&str, &str), Error> {
let mut iter = namespace.split('_');
let org_id = iter.next().ok_or_else(|| Error::new(namespace, "empty"))?;
if org_id.is_empty() {View on GitHub (pinned to 06200ef96b)