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

  1. Verify the plugin file path exists on the server host: `ls -l /path/to/plugin.py`.
  2. Mount the plugin directory into the container and restart (e.g. docker -v / k8s volumeMount).
  3. Fix file permissions so the server process user can read the file.
  4. 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

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)