{"record":{"id":"efab795d0ed841b0","repo":"influxdata/influxdb","slug":"error-fetching-plugin-from-repository-0-1","errorCode":null,"errorMessage":"error fetching plugin from repository: {0} {1}","messagePattern":"error fetching plugin from repository: (.+?) (.+?)","errorType":"exception","errorClass":"PluginError","httpStatus":null,"severity":"error","filePath":"influxdb3_processing_engine/src/plugins.rs","lineNumber":65,"sourceCode":"    #[error(transparent)]\n    AnyhowError(#[from] anyhow::Error),\n\n    #[error(\"reading plugin file: {0}\")]\n    ReadPluginError(#[from] std::io::Error),\n\n    #[error(\"error executing plugin: {0}\")]\n    PluginExecutionError(#[from] influxdb3_py_api::error::ExecutePluginError),\n\n    #[error(\"invalid cron syntax: {0}\")]\n    InvalidCronSyntax(#[from] cron::error::Error),\n\n    #[error(\"cron schedule never triggers: {0}\")]\n    CronScheduleNeverTriggers(String),\n\n    #[error(\"non-schedule plugin with schedule trigger: {0}\")]\n    NonSchedulePluginWithScheduleTrigger(String),\n\n    #[error(\"error fetching plugin from repository: {0} {1}\")]\n    FetchingFromRepository(reqwest::StatusCode, String),\n\n    #[error(\n        \"plugin installation is disabled; plugins must already exist in the configured plugin directory\"\n    )]\n    PluginInstallationDisabled,\n\n    #[error(\"Join error, please report: {0}\")]\n    JoinError(#[from] tokio::task::JoinError),\n\n    #[error(\"Node not configured with plugin directory\")]\n    NoPluginDir,\n\n    #[error(\n        \"Path traversal detected: plugin filename '{0}' attempts to access files outside the plugin directory\"\n    )]\n    PathTraversal(String),\n}","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_processing_engine/src/plugins.rs#L47-L83","documentation":"PluginError::FetchingFromRepository(status, body) is thrown when an HTTP GET to the plugin repository returns a non-success status code; the status code and response body are embedded in the message. The library throws it inside plugin download/install flows when reqwest reports an error response.","triggerScenarios":"Installing a plugin from a remote repository (e.g. GitHub) where the URL returns 404 (plugin doesn't exist), 403 (rate-limited/private repo), or 5xx.","commonSituations":"Misspelled GitHub org/repo/path in the plugin URL; hitting GitHub API rate limits without auth token; private repository requiring credentials; offline/proxy issues causing gateway errors.","solutions":["Check the embedded status code: fix the URL if 404, add authentication/rate-limit token if 403, retry later if 5xx.","Verify network/proxy connectivity to the repository host with curl.","Pre-install the plugin into the configured plugin directory to bypass remote fetching."],"exampleFix":"// before (anonymous GitHub API call, 403 rate limit)\nGET https://api.github.com/repos/org/repo/contents/plugin.py\n// after (with token)\nreqwest::Client::new().get(url).header(\"Authorization\", format!(\"Bearer {token}\"))","handlingStrategy":"retry","validationCode":"// pre-check URL reachability\nconst res = await fetch(repoUrl, {method: 'HEAD'});\nif (!res.ok) throw new Error(`repo pre-check failed: ${res.status}`);","typeGuard":null,"tryCatchPattern":"match install_result {\n    Err(PluginError::FetchingFromRepository(status, body)) if status == 403 || status.as_u16() >= 500 => retry_with_backoff(),\n    Err(PluginError::FetchingFromRepository(StatusCode::NOT_FOUND, _)) => fix_plugin_url(),\n    Err(e) => return Err(e),\n    Ok(p) => Ok(p),\n}","preventionTips":["Use authenticated repository access to avoid rate limits.","Verify plugin URLs (org/repo/path) before install.","Keep plugins pre-installed locally for offline/restricted environments."],"tags":["network","http","plugin-install"],"backgroundTag":"http-error-response","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"}