{"record":{"id":"10ccdb77c8e34254","repo":"LemmyNet/lemmy","slug":"plugin-timeout","errorCode":null,"errorMessage":"plugin timeout","messagePattern":"plugin timeout","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/api/api_utils/src/plugins.rs","lineNumber":287,"sourceCode":"      let builder = move || PluginBuilder::new(manifest.clone()).with_wasi(true).build();\n      let pool = Pool::new(builder);\n      if let Some(mut p) = pool.get(GET_PLUGIN_TIMEOUT)?\n        && p.function_exists(\"init\")\n      {\n        p.call::<_, ()>(\"init\", ())?;\n      }\n      Ok(LemmyPlugin {\n        pool,\n        filename: filename.unwrap_or(settings.file),\n      })\n    }\n\n    #[expect(clippy::if_then_some_else_none)]\n    fn get(&self, name: &'static str) -> LemmyResult<Option<PoolPlugin>> {\n      let p = self\n        .pool\n        .get(GET_PLUGIN_TIMEOUT)?\n        .ok_or(anyhow!(\"plugin timeout\"))?;\n\n      Ok(if p.function_exists(name) {\n        Some(p)\n      } else {\n        None\n      })\n    }\n  }\n\n  impl LemmyPlugins {\n    /// Load and initialize all plugins\n    pub fn get_or_init() -> Self {\n      static PLUGINS: LazyLock<LemmyPlugins> = LazyLock::new(|| {\n        let mut plugins: Vec<_> = SETTINGS\n          .plugins\n          .iter()\n          .flat_map(|p| {\n            LemmyPlugin::init(p.clone())","sourceCodeStart":269,"sourceCodeEnd":305,"githubUrl":"https://github.com/LemmyNet/lemmy/blob/439734dd638a2c06a2f907beab7dcf4646e88f86/crates/api/api_utils/src/plugins.rs#L269-L305","documentation":"Timeout sentinel raised while fetching a WASM plugin from its instance pool: Pool::get(GET_PLUGIN_TIMEOUT) returned nothing within the configured timeout, meaning no plugin instance was free to acquire (all instances busy or the wasm module failed to build/return in time). The input at fault is the plugin named `name` whose pool is exhausted or whose builder is too slow.","triggerScenarios":"Thrown at crates/api/api_utils/src/plugins.rs:287 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Increase the GET_PLUGIN_TIMEOUT or pool capacity for heavily used plugins.","Check plugin initialization (`init` call) for hangs or slow builds that starve the pool.","Retry the plugin call; pool timeouts are typically transient under load."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"439734dd638a2c06a2f907beab7dcf4646e88f86","analyzedAt":"2026-09-06T11:28:35.035Z","contentChangedAt":"2026-09-06T11:28:35.035Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}