{"record":{"id":"0883d7b09491547a","repo":"EpicGames/lore","slug":"failed-to-create-immutable-store-plugin-mode-e","errorCode":null,"errorMessage":"Failed to create immutable store plugin '{mode}': {e}","messagePattern":"Failed to create immutable store plugin '(.+?)': (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":928,"sourceCode":"            let remote_settings = settings\n                .immutable_store\n                .remote\n                .as_ref()\n                .ok_or(anyhow!(\"Missing remote immutable store settings\"))?;\n\n            configure_remote_immutable_store(remote_settings)\n        }\n        _ => {\n            // All other modes use the plugin system\n            let plugin_config =\n                resolve_plugin_config_with_fallback(&settings.plugins, mode, \"immutable_store\")\n                    .unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));\n\n            info!(mode, \"Creating immutable store via plugin system\");\n\n            registry\n                .create_immutable_store(mode, &plugin_config)\n                .map_err(|e| anyhow!(\"Failed to create immutable store plugin '{mode}': {e}\"))\n        }\n    }\n}\n\nasync fn configure_mutable_store_via_plugin(\n    registry: &PluginRegistry,\n    settings: &Settings,\n    immutable_store: Arc<dyn ImmutableStore>,\n) -> Result<Arc<dyn MutableStore>> {\n    let mode = &settings.mutable_store.mode;\n\n    match mode.as_str() {\n        store_mode::LOCAL => {\n            let local_settings = settings\n                .mutable_store\n                .local\n                .as_ref()\n                .ok_or(anyhow!(\"Missing local mutable store settings\"))?;","sourceCodeStart":910,"sourceCodeEnd":946,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L910-L946","documentation":"Wraps an error from registry.create_immutable_store when the configured mode is not one of the built-in modes and is dispatched to the plugin system instead. The plugin failed to construct the immutable store for the given mode/config; the message includes the mode and the underlying plugin error.","triggerScenarios":"immutable_store.mode is a plugin-managed value (not local/composite/replicated/remote) and registry.create_immutable_store(mode, &plugin_config) returns Err — e.g. plugin not registered, plugin init failed, or plugin_config (the TOML table under the mode) is invalid.","commonSituations":"Custom store mode typo'd or no plugin registered for it; plugin binary/library missing from the registry; plugin-specific config keys wrong or empty; plugin incompatible with the server version.","solutions":["Read the wrapped '{e}' message and fix the plugin-specific configuration under [immutable_store.<mode>].","Verify the plugin for the given mode is registered in the PluginRegistry before configuration runs.","Check the mode string spelling in immutable_store.mode.","Confirm plugin compatibility with the current server version and that any plugin dependency is installed."],"exampleFix":"# before\n[immutable_store]\nmode = \"s3plugn\"  # typo, plugin not found\n\n# after\n[immutable_store]\nmode = \"s3plugin\"\n[immutable_store.s3plugin]\nbucket = \"my-bucket\"","handlingStrategy":"try-catch","validationCode":"if !builtin_modes.contains(&settings.immutable_store.mode.as_str()) {\n    ensure!(registry.has_immutable_plugin(&settings.immutable_store.mode), \"no plugin registered for mode '{}'\", settings.immutable_store.mode);\n}","typeGuard":null,"tryCatchPattern":"match configure_immutable_store_via_plugin(&registry, &settings, &topology).await {\n    Err(e) if e.to_string().starts_with(\"Failed to create immutable store plugin\") => {\n        eprintln!(\"plugin store init failed; check plugin registration and its config: {e}\");\n    }\n    other => other?,\n}","preventionTips":["Register all store plugins in the PluginRegistry before store configuration runs.","Validate plugin-specific config tables at CI/startup time.","Keep custom mode strings in one shared constant list to avoid typos.","Test plugin store creation against the server version in CI."],"tags":["plugin","store","configuration","startup"],"backgroundTag":"module-init-failed","analyzedSha":"074eb0b0d1194c997d7cf28b55519e3e197b3e23","analyzedAt":"2026-09-13T09:00:57.509Z","contentChangedAt":"2026-09-13T09:00:57.509Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}