EpicGames/lore · error

Failed to create local store

Error message

Failed to create local store

What it means

The same helper then creates the local (second) ImmutableStore and panics with this message if that creation fails. Functionally identical to the main-store failure but for the local store used to verify local-routing behavior.

Solutions

  1. Inspect the underlying test_store_create error for the local store specifically
  2. Ensure the two stores use distinct, isolated paths/identities so they don't collide
  3. Free CI resources or reduce parallel test concurrency that starves store creation
  4. Update the helper if store creation API changed

Example fix

// before
let (local_store, _, _) = test_store_create().await.expect("Failed to create local store");
// after
let (local_store, _, _) = test_store_create().await
    .unwrap_or_else(|e| panic!("Failed to create local store: {e:?}"));
Defensive patterns

Strategy: fallback

Validate before calling

// preflight resources before creating the second store
assert!(free_disk(temp_parent) > MIN_STORE_BYTES, "insufficient space for local test store");

Try / catch

match test_store_create().await {
    Ok((local_store, _, _)) => { /* use local store */ },
    Err(e) => panic!("local store init failed: {e:?}"),
}

Prevention

When it happens

Trigger: test_store_create fails for the second store: backend resource exhaustion, conflicting store identity/configuration, or environment limits hit after the first store was already created.

Common situations: Tests creating two stores in one process exceeding configured limits, temp-dir collisions between main and local stores, or CI resource caps (inodes, memory) reached mid-test.

Related errors


AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13). Data as JSON: /api/errors/a3d6073f3fba60e7. Report an issue: GitHub.

Appendix: source

Thrown at lore-server/src/quic/replication_store_service/server.rs:1074

            .await
            .expect("handler should succeed even for a miss");
        let parsed_response =
            get_metadata::parse_response(collapse_bytes(&service_output)).expect("Failed to parse");
        assert_eq!(parsed_response.match_made, StoreMatch::MatchNone);
    }

    /// Helper to create a second independent store for local-store routing tests
    async fn create_two_stores() -> (
        Arc<dyn ImmutableStore>,
        Arc<dyn ImmutableStore>,
        Arc<lore_revision::interface::ExecutionContext>,
    ) {
        let (main_store, _, execution) = test_store_create()
            .await
            .expect("Failed to create main store");
        let (local_store, _, _) = test_store_create()
            .await
            .expect("Failed to create local store");
        (main_store, local_store, execution)
    }

    #[tokio::test]
    async fn immutable_local_query_routes_to_local_store() {
        let (main_store, local_store, execution) = create_two_stores().await;

        let repository = random::<Context>();
        let (fragment, address, payload) = fragment::generate_random();

        // put data only in the local store
        {
            let local_store = local_store.clone();
            LORE_CONTEXT
                .scope(execution.clone(), async move {
                    local_store
                        .put(repository.into(), address, fragment, Some(payload), false)
                        .await

View on GitHub (pinned to 074eb0b0d1)