EpicGames/lore · error · anyhow::Error

Missing local immutable store settings

Error message

Missing local immutable store settings

What it means

Thrown by configure_immutable_store_via_plugin when the immutable store mode is "local" but settings.immutable_store.local is None. The local mode requires its dedicated settings block to construct the store; the absent section aborts configuration.

Solutions

  1. Add an [immutable_store.local] section with the required local store options (e.g. path/data_dir).
  2. Fix the subsection key spelling so it deserializes into settings.immutable_store.local.
  3. Choose a different store mode matching the sections actually present in the config.

Example fix

# before
[immutable_store]
mode = "local"

# after
[immutable_store]
mode = "local"
[immutable_store.local]
path = "/var/lib/lore/immutable"
Defensive patterns

Strategy: validation

Validate before calling

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

Type guard

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

Prevention

When it happens

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

Common situations: Setting the mode to local without adding its data_dir/path options; typo in the TOML subsection name so it fails to deserialize; template config left with mode changed but subsection removed.

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/8e4c29e9b8a9d636. Report an issue: GitHub.

Appendix: source

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

    fn name(&self) -> &'static str {
        "QuicInternalStreamHandler"
    }
}

async fn configure_immutable_store_via_plugin(
    registry: &PluginRegistry,
    settings: &Settings,
    topology: Option<Arc<dyn Topology + Send + Sync>>,
) -> Result<Arc<dyn ImmutableStore>> {
    let mode = &settings.immutable_store.mode;

    match mode.as_str() {
        store_mode::LOCAL => {
            let local_settings = settings
                .immutable_store
                .local
                .as_ref()
                .ok_or(anyhow!("Missing local immutable store settings"))?;

            configure_local_immutable_store(local_settings).await
        }
        store_mode::COMPOSITE => {
            let composite_settings = settings
                .immutable_store
                .composite
                .as_ref()
                .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"))?;

View on GitHub (pinned to 074eb0b0d1)