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

  1. Add the `[mutable_store.remote]` table with the connection details your remote backend requires.
  2. Double-check the mode string is intentional; if you meant local storage, set mode = "local" and supply `[mutable_store.local]`.
  3. 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

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


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)