EpicGames/lore · error
Failed to create mutable store plugin
Error message
Failed to create mutable store plugin '{mode}': {e} What it means
For any mutable-store mode not handled by the built-in local/remote/replicated/composite arms, the server delegates to the plugin registry: registry.create_mutable_store(mode, &plugin_config, immutable_store). If the plugin construction fails for any reason, the error is re-wrapped with context naming the mode via anyhow! at server.rs:973. The inner cause (plugin lookup failure, bad plugin config, backend connection error) is chained as the error source.
Solutions
- Inspect the chained cause of the anyhow error — it carries the plugin's underlying failure; fix that first.
- Confirm a plugin for this exact mode is registered (feature flag / plugin crate compiled into the binary).
- Validate the `[plugins.<mode>]` config table against the plugin's documented schema.
- Test connectivity/credentials of the plugin's backend service independently of lore-server.
Example fix
// before (settings.toml) [mutable_store] mode = "sqlite" # no plugins config // after (settings.toml) [mutable_store] mode = "sqlite" [plugins.sqlite] database_url = "sqlite:///var/lib/lore/mutable.db"
Defensive patterns
Strategy: try-catch
Validate before calling
// Rust, before launch: confirm the plugin mode is registered
fn plugin_mode_ready(registry: &PluginRegistry, mode: &str) -> bool {
registry.has_mutable_store_plugin(mode) // adapt to your registry API
} Try / catch
match configure_mutable_store_via_plugin(®istry, &settings, immutable).await {
Ok(store) => store,
Err(e) => {
// anyhow chain carries the plugin's root cause
for cause in e.chain() { eprintln!("caused by: {cause}"); }
return Err(e.context("mutable store plugin failed"));
}
} Prevention
- Verify the plugin crate/feature is compiled into the binary for every configured mode.
- Validate [plugins.*] tables against each plugin's schema in CI.
- Smoke-test backend connectivity (DB/S3) before starting lore-server.
- Check the anyhow error chain, not just the top-level message, when debugging.
When it happens
Trigger: mutable_store.mode names a custom/plugin mode and create_mutable_store returns Err — e.g. no plugin registered for that mode, malformed `[plugins.*]` config for it, or the plugin's backend (database, S3, etc.) rejecting the configuration or connection.
Common situations: Typo in the plugin mode name so no factory matches; plugin crate/feature not compiled in; plugin config table missing required keys; the backing service is unreachable or credentials are wrong at first startup.
Related errors
- Failed to create immutable store plugin
- Missing local mutable store settings
- replicated mutable store is not implemented
- Failed to create lock store plugin
- [environment.endpoint] auth_url is set but [server.auth] is…
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/f10f234444d09962.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/server.rs:973
.ok_or(anyhow!("Missing remote mutable store settings"))?;
configure_remote_mutable_store(remote_settings)
}
store_mode::REPLICATED => Err(anyhow!("replicated mutable store is not implemented")),
store_mode::COMPOSITE => Err(anyhow!(
"Invalid settings, cannot have composite store as mutable store"
)),
_ => {
// All other modes use the plugin system
let plugin_config =
resolve_plugin_config_with_fallback(&settings.plugins, mode, "mutable_store")
.unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));
info!(mode, "Creating mutable store via plugin system");
registry
.create_mutable_store(mode, &plugin_config, immutable_store)
.map_err(|e| anyhow!("Failed to create mutable store plugin '{mode}': {e}"))
}
}
}
fn configure_lock_store_via_plugin(
registry: &PluginRegistry,
settings: &Settings,
) -> Result<Option<Arc<dyn LockStore>>> {
if let Some(lock_settings) = &settings.lock_store {
let mode = &lock_settings.mode;
// The only way to opt out of a store `default.toml` sets.
if mode == store_mode::NONE {
info!("No lock store configured, LockService will not register");
return Ok(None);
}
if mode == store_mode::LOCAL {View on GitHub (pinned to 074eb0b0d1)