EpicGames/lore · error
Missing remote mutable store settings
Error message
Missing remote mutable store settings
What it means
When settings.mutable_store.mode is "remote", the server requires the optional `mutable_store.remote` settings table describing the remote backend. The remote arm unwraps the Option with `.ok_or(anyhow!(...))` and fails startup with this message when it is None. It mirrors the local-mode check but for the remote store configuration.
Solutions
- Add the `[mutable_store.remote]` table with the connection details your remote backend requires.
- Double-check the mode string is intentional; if you meant local storage, set mode = "local" and supply `[mutable_store.local]`.
- Validate the full settings struct deserializes before launch (a config lint/check step or a unit test loading the TOML).
Example fix
// before (settings.toml) [mutable_store] mode = "remote" // after (settings.toml) [mutable_store] mode = "remote" [mutable_store.remote] url = "https://storage.example.com" bucket = "lore-data"
Defensive patterns
Strategy: validation
Validate before calling
// Rust
fn validate_mutable_remote(settings: &Settings) -> Result<(), String> {
if settings.mutable_store.mode == "remote" && settings.mutable_store.remote.is_none() {
return Err("mutable_store.mode = \"remote\" requires a [mutable_store.remote] table".into());
}
Ok(())
} Type guard
fn has_remote_mutable_settings(s: &Settings) -> bool {
s.mutable_store.mode != "remote" || s.mutable_store.remote.is_some()
} Prevention
- Validate the full Settings struct deserializes from the merged config before launch.
- When migrating local→remote, migrate the settings block in the same change as the mode switch.
- Use config templating that couples mode and its sub-table so they can't diverge.
When it happens
Trigger: Settings contain `[mutable_store] mode = "remote"` with no `[mutable_store.remote]` table, so `settings.mutable_store.remote.as_ref()` is None in configure_mutable_store_via_plugin.
Common situations: Switching a deployment from local to remote storage without adding the remote backend settings (endpoint, bucket, credentials block); configuration template left partially filled; a merge/diff tool dropped the remote table.
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 local mutable store settings
- Missing composite remote store settings
- Missing composite replicated store settings
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/12ec41c1dab69cdd.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/server.rs:955
) -> 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 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}"))View on GitHub (pinned to 074eb0b0d1)