EpicGames/lore · error

Missing max size on local store settings

Error message

Missing max size on local store settings

What it means

Seeding (enabled by the 'seeding' cargo feature and the LORE_SEEDING env var) fills the local immutable store up to a capacity limit taken from LocalImmutableStoreSettings.max_size. If LORE_SEEDING is set but max_size is None, seeding cannot know when to stop and returns this error.

Solutions

  1. Set max_size under [immutable_store.local] in the config used for the seeding run
  2. Unset the LORE_SEEDING env var if seeding was not intended
  3. Fail fast in deployment scripts: check that max_size is configured whenever LORE_SEEDING is exported

Example fix

# before
[immutable_store.local]
path = "/data/store"

# after
[immutable_store.local]
path = "/data/store"
max_size = 1000000000
Defensive patterns

Strategy: validation

Validate before calling

if std::env::var("LORE_SEEDING").is_ok() && settings.max_size.is_none() {
    return Err("LORE_SEEDING is set but immutable_store.local.max_size is not configured");
}

Type guard

fn seedable(s: &LocalImmutableStoreSettings) -> bool { s.max_size.is_some() }

Try / catch

match seed_local_store(&local_store_settings).await {
    Err(e) if e.to_string().contains("Missing max size") => {
        eprintln!("set max_size under [immutable_store.local] or unset LORE_SEEDING"); std::process::exit(2);
    }
    r => r?,
}

Prevention

When it happens

Trigger: LORE_SEEDING env var is set, the store mode resolves to local settings, but the [immutable_store.local] config lacks a max_size key, so max_size is None in seed_local_store.

Common situations: CI/test seeding runs against a config written for production that omits max_size; recently removed max_size while still exporting LORE_SEEDING in the environment.

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

Appendix: source

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

            let result = lore_revision::store::seeder::seed_local_store(
                local_store,
                max_size,
                margin,
                buffer,
            )
            .await
            .map_err(anyhow::Error::from);

            info!("Done seeding local store, flushing store to disk.");
            // Since we effectively disabled background flushing, we force a flush once seeding is
            // complete
            store.flush(true).await.map_err(anyhow::Error::from)?;
            info!("Done flushing store to disk.");

            result
        } else {
            warn!("Seeding was requested, but no max size was found.");
            Err(anyhow!("Missing max size on local store settings"))
        }
    } else {
        info!("Not seeding local store");
        Ok(())
    }
}

fn observe_task_lifecycles() {
    let meter = lore_telemetry::meter("lore.runtime");
    let spawned_tasks = meter
        .u64_counter("lore.runtime.tasks.spawned.total")
        .build();
    let inflight_tasks = meter
        .i64_up_down_counter("lore.runtime.tasks.running.total")
        .build();

    let callback = move |event: LoreTaskLifecycleEvent, spawn_location: &LoreTaskSpawnLocation| {
        let context_label = if let Some(context) = lore_revision::runtime::try_execution_context() {

View on GitHub (pinned to 074eb0b0d1)