EpicGames/lore · error

Failed to create immutable store

Error message

Failed to create {mode} immutable store: {e}

What it means

For substore modes that are not local/remote/composite/replicated, the server falls back to the plugin registry to create the immutable store. If the plugin's create_immutable_store call fails (unknown plugin, bad plugin config, plugin-internal error), the error is wrapped with this message naming the mode.

Solutions

  1. Check the 'Registered plugins - immutable stores: ...' startup log line to confirm the plugin for this mode is registered
  2. Enable the cargo feature that provides the store plugin, or install/register it in the plugin registry
  3. Fix the [plugins.<mode>] TOML config section so the plugin accepts it
Defensive patterns

Strategy: try-catch

Validate before calling

if !registry.list_immutable_store_plugins().contains(&mode.to_string()) {
    return Err(format!("no immutable store plugin registered for mode '{mode}'"));
}

Try / catch

match registry.create_immutable_store(mode, &plugin_config) {
    Ok(store) => store,
    Err(e) => return Err(anyhow!("Failed to create {mode} immutable store: {e}"
        )).with_context(|| format!("check that plugin '{mode}' is compiled in and [plugins.{mode}] config is valid")),
}

Prevention

When it happens

Trigger: settings.immutable_store.composite lists a substore mode that matches no built-in arm and for which no immutable-store plugin is registered under that name; or the plugin is registered but its config TOML is invalid, causing create_immutable_store to return Err.

Common situations: Misspelled custom store mode in TOML; plugin feature flag not enabled at build time so the plugin was never registered; plugin config section wrong or empty because resolve_plugin_config_with_fallback fell back to an empty table.

Related errors


AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13). Data as JSON: /api/errors/59ebf0db3b96fd95. Report an issue: GitHub.

Appendix: source

Thrown at lore-server/src/server.rs:1446

                .as_ref()
                .ok_or(anyhow!("Missing composite replicated store settings"))?;

            configure_replicated_immutable_store(replicated_settings).await
        }
        _ => {
            // All other modes use the plugin system
            let plugin_config = resolve_plugin_config_with_fallback(
                &global_settings.plugins,
                mode,
                "immutable_store",
            )
            .unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));

            info!(mode, "Creating composite substore via plugin system");

            let store = registry
                .create_immutable_store(mode, &plugin_config)
                .map_err(|e| anyhow!("Failed to create {mode} immutable store: {e}"))?;

            Ok(store)
        }
    }
}

async fn configure_notification(
    endpoints: &mut JoinSet<Result<()>>,
    registry: &PluginRegistry,
    environment: &Option<EnvironmentConfig>,
    notification_settings: &Option<NotificationSettings>,
    immutable_store: Option<&Arc<dyn ImmutableStore>>,
    plugins: &HashMap<String, toml::Value>,
) -> Result<(Arc<dyn NotificationSender>, Option<NotificationService>)> {
    let mode = notification_settings
        .as_ref()
        .map_or("local", |ns| ns.mode.as_ref());
    match mode {

View on GitHub (pinned to 074eb0b0d1)