EpicGames/lore · error
Missing local mutable store settings
Error message
Missing local mutable store settings
What it means
During server startup, configure_mutable_store_via_plugin dispatches on settings.mutable_store.mode. When the mode is "local", the optional `mutable_store.local` settings table must be present because it carries the local store's path and options. This error is thrown via `.ok_or(anyhow!(...))` when that table is absent, meaning the config selected a mode but did not supply the matching settings block.
Solutions
- Add the missing `[mutable_store.local]` table to your settings TOML with the required keys (e.g. a data path).
- Verify by deserializing the settings that mutable_store.mode matches whichever sub-table you provided.
- If you do not need a local mutable store, set mutable_store.mode to the intended mode (e.g. "remote" with a `[mutable_store.remote]` block) instead.
Example fix
// before (settings.toml) [mutable_store] mode = "local" // after (settings.toml) [mutable_store] mode = "local" [mutable_store.local] path = "/var/lib/lore/mutable"
Defensive patterns
Strategy: validation
Validate before calling
// Rust, before starting the server
fn validate_mutable_local(settings: &Settings) -> Result<(), String> {
if settings.mutable_store.mode == "local" && settings.mutable_store.local.is_none() {
return Err("mutable_store.mode = \"local\" requires a [mutable_store.local] table".into());
}
Ok(())
} Type guard
fn has_local_mutable_settings(s: &Settings) -> bool {
s.mutable_store.mode != "local" || s.mutable_store.local.is_some()
} Prevention
- Keep each mutable_store mode's settings table together with its mode in one config template.
- Run a config-validation step (deserialize Settings in CI) before deploying.
- Never edit only the mode field without adding/removing the matching sub-table.
When it happens
Trigger: Settings file contains `[mutable_store] mode = "local"` but no `[mutable_store.local]` table; the `local` field is None when configure_mutable_store_via_plugin reaches the store_mode::LOCAL arm.
Common situations: Hand-edited TOML where the mode was changed to "local" but the local block was deleted; a minimal/templated config that only sets the mode; merging config layers where mutable_store.local was lost; copying an immutable-store-only config into the mutable section.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- [environment.endpoint] auth_url is set but [server.auth] is…
- [environment.endpoint] auth_url and [server.auth]…
- Missing remote mutable store settings
- replicated mutable store is not implemented
- Failed to create mutable store plugin
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/27341610378ae00a.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/server.rs:946
.map_err(|e| anyhow!("Failed to create immutable store plugin '{mode}': {e}"))
}
}
}
async fn configure_mutable_store_via_plugin(
registry: &PluginRegistry,
settings: &Settings,
immutable_store: Arc<dyn ImmutableStore>,
) -> Result<Arc<dyn MutableStore>> {
let mode = &settings.mutable_store.mode;
match mode.as_str() {
store_mode::LOCAL => {
let local_settings = settings
.mutable_store
.local
.as_ref()
.ok_or(anyhow!("Missing local mutable store settings"))?;
configure_local_mutable_store(local_settings, immutable_store).await
}
store_mode::REMOTE => {
let remote_settings = settings
.mutable_store
.remote
.as_ref()
.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 systemView on GitHub (pinned to 074eb0b0d1)