EpicGames/lore · error

Missing composite local store settings

Error message

Missing composite local store settings

What it means

configure_composite_substore builds the sub-stores of a composite immutable store. For the store_mode::LOCAL arm it unwraps the optional `local` sub-settings with `.ok_or(anyhow!("Missing composite local store settings"))`; if the composite immutable store declares a local sub-store but the local settings block is absent, startup fails with this error. It is the composite analogue of the plain missing-local error.

Solutions

  1. Add the missing local sub-store table under the composite settings (e.g. [immutable_store.composite.local]) with its required keys.
  2. Confirm the nesting level: sub-store settings must live under the composite section, not the top-level store section.
  3. If the local tier is not wanted, adjust the composite configuration to only include the sub-stores you configured.

Example fix

// before (settings.toml)
[immutable_store]
mode = "composite"

[immutable_store.composite]
# local sub-store declared but not configured

// after (settings.toml)
[immutable_store]
mode = "composite"

[immutable_store.composite.local]
path = "/var/lib/lore/immutable"
Defensive patterns

Strategy: validation

Validate before calling

// Rust
fn validate_composite_local(settings: &Settings) -> Result<(), String> {
    let composite = &settings.immutable_store.composite;
    if composite.mode == "local" && composite.local.is_none() {
        return Err("composite sub-store 'local' requires local settings".into());
    }
    Ok(())
}

Type guard

fn has_composite_local(s: &Settings) -> bool {
    s.immutable_store.composite.local.is_some()
}

Prevention

When it happens

Trigger: Settings use an immutable composite store whose composite config requires a local sub-store (mode "local") but `settings.<composite>.local` is None when configure_composite_substore dispatches on LOCAL.

Common situations: Writing a composite config that names local/remote sub-stores but omitting the per-sub-store tables; hand-merging configs where the [*.composite.local] section was dropped; schema drift after upgrading lore-server so the local block is nested in the wrong place.

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

Appendix: source

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

            .set_topology_subscription(topology.clone())
            .await;
    }

    Ok(store)
}

async fn configure_composite_substore(
    registry: &PluginRegistry,
    mode: &str,
    global_settings: &Settings,
    settings: &CompositeSubStoreSettings,
) -> Result<Arc<dyn ImmutableStore>> {
    match mode {
        store_mode::LOCAL => {
            let local_settings = settings
                .local
                .as_ref()
                .ok_or(anyhow!("Missing composite local store settings"))?;

            configure_local_immutable_store(local_settings).await
        }
        store_mode::REMOTE => {
            let remote_settings = settings
                .remote
                .as_ref()
                .ok_or(anyhow!("Missing composite remote store settings"))?;

            configure_remote_immutable_store(remote_settings)
        }
        store_mode::COMPOSITE => Err(anyhow!(
            "Composite store not supported as a composite substore"
        )),
        store_mode::REPLICATED => {
            let replicated_settings = settings
                .replicated
                .as_ref()

View on GitHub (pinned to 074eb0b0d1)