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

  1. Add the missing `[mutable_store.local]` table to your settings TOML with the required keys (e.g. a data path).
  2. Verify by deserializing the settings that mutable_store.mode matches whichever sub-table you provided.
  3. 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

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


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 system

View on GitHub (pinned to 074eb0b0d1)