influxdata/influxdb · error · PluginError
Node not configured with plugin directory
Error message
Node not configured with plugin directory
What it means
PluginError::NoPluginDir is thrown when the node is not configured with a plugin directory but an operation requires one (e.g. resolving, installing, or listing local plugins). The server's plugin directory option was not set.
Solutions
- Start the server with the plugin directory configured (e.g. influxdb3 serve --plugin-dir /path/to/plugins).
- Ensure the directory exists and is readable/writable by the server process.
- If running in a container, mount a volume and pass the flag in the service definition.
Example fix
// before influxdb3 serve --node-id node1 // after influxdb3 serve --node-id node1 --plugin-dir /var/lib/influxdb3/plugins
Defensive patterns
Strategy: validation
Validate before calling
// before invoking plugin APIs, verify server config
const pluginDir = serverConfig.plugin_dir;
if (!pluginDir) throw new Error('server started without --plugin-dir');
if (!fs.existsSync(pluginDir)) fs.mkdirSync(pluginDir, {recursive: true}); Prevention
- Always pass --plugin-dir in service definitions, Dockerfiles, and systemd units.
- Create and mount the plugin directory before startup.
- Add startup health checks asserting the plugin dir is configured.
When it happens
Trigger: Invoking plugin install/lookup while the server was started without --plugin-dir (or equivalent env), so the processing engine has no directory to operate on.
Common situations: Fresh deployments missing the plugin-dir flag; systemd/docker units omitting the volume mount and flag; operators assume a default plugin directory exists.
Understand the failure class
Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.
Related errors
- Python plugins not enabled on this server
- cannot change the configured generation duration for level
- cron schedule never triggers
- Custom partition template must have at least one part
- database not found for trigger
AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19).
Data as JSON: /api/errors/40defffd82df2b13.
Report an issue: GitHub.
Appendix: source
Thrown at influxdb3_processing_engine/src/plugins.rs:76
#[error("cron schedule never triggers: {0}")]
CronScheduleNeverTriggers(String),
#[error("non-schedule plugin with schedule trigger: {0}")]
NonSchedulePluginWithScheduleTrigger(String),
#[error("error fetching plugin from repository: {0} {1}")]
FetchingFromRepository(reqwest::StatusCode, String),
#[error(
"plugin installation is disabled; plugins must already exist in the configured plugin directory"
)]
PluginInstallationDisabled,
#[error("Join error, please report: {0}")]
JoinError(#[from] tokio::task::JoinError),
#[error("Node not configured with plugin directory")]
NoPluginDir,
#[error(
"Path traversal detected: plugin filename '{0}' attempts to access files outside the plugin directory"
)]
PathTraversal(String),
}
#[derive(Debug, Clone)]
pub struct ProcessingEngineEnvironmentManager {
pub plugin_dir: Option<PathBuf>,
pub virtual_env_location: Option<PathBuf>,
pub package_manager: Arc<dyn PythonEnvironmentManager>,
pub plugin_dir_only: bool,
pub plugin_repo: Option<String>,
}
pub(crate) fn run_schedule_event_source(View on GitHub (pinned to 06200ef96b)