EpicGames/lore · error

Missing remote immutable store settings

Error message

Missing remote immutable store settings

What it means

Thrown by configure_immutable_store_via_plugin when mode is "remote" but settings.immutable_store.remote is None. Remote stores need endpoint/connection settings; without them the store cannot be constructed and startup aborts.

Solutions

  1. Add an [immutable_store.remote] section with endpoint/connection settings.
  2. Verify the subsection key matches the Settings schema.
  3. Pick a mode consistent with the config sections provided.

Example fix

# before
[immutable_store]
mode = "remote"

# after
[immutable_store]
mode = "remote"
[immutable_store.remote]
endpoint = "http://remote-host:9000"
Defensive patterns

Strategy: validation

Validate before calling

if settings.immutable_store.mode == "remote" && settings.immutable_store.remote.is_none() {
    return Err(anyhow!("mode=remote requires [immutable_store.remote] settings"));
}

Type guard

fn remote_store_configured(s: &ImmutableStoreSettings) -> bool {
    s.mode != "remote" || s.remote.is_some()
}

Prevention

When it happens

Trigger: immutable_store.mode = "remote" in config while settings.immutable_store.remote is None (missing [immutable_store.remote] subsection).

Common situations: Pointing the mode at a remote backend without adding its endpoint settings; config migration dropping the subsection; typo in the TOML key.

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/52dabf970ea6b03d. Report an issue: GitHub.

Appendix: source

Thrown at lore-server/src/server.rs:914

                .ok_or(anyhow!("Missing composite store settings"))?;

            configure_composite_store(registry, composite_settings, settings, topology).await
        }
        store_mode::REPLICATED => {
            let replicated_settings = settings
                .immutable_store
                .replicated
                .as_ref()
                .ok_or(anyhow!("Missing replicated store settings"))?;

            configure_replicated_immutable_store(replicated_settings).await
        }
        store_mode::REMOTE => {
            let remote_settings = settings
                .immutable_store
                .remote
                .as_ref()
                .ok_or(anyhow!("Missing remote immutable store settings"))?;

            configure_remote_immutable_store(remote_settings)
        }
        _ => {
            // All other modes use the plugin system
            let plugin_config =
                resolve_plugin_config_with_fallback(&settings.plugins, mode, "immutable_store")
                    .unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));

            info!(mode, "Creating immutable store via plugin system");

            registry
                .create_immutable_store(mode, &plugin_config)
                .map_err(|e| anyhow!("Failed to create immutable store plugin '{mode}': {e}"))
        }
    }
}

View on GitHub (pinned to 074eb0b0d1)