{"record":{"id":"279123869cda5dd6","repo":"EpicGames/lore","slug":"cannot-configure-grpc-internal-server-no-local-store","errorCode":null,"errorMessage":"Cannot configure gRPC internal server, no local store","messagePattern":"Cannot configure gRPC internal server, no local store","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":616,"sourceCode":"\n    info!(\"Starting Lore gRPC internal server: {}\", &addr);\n\n    let (cert_path, key_path, cert_chain_path) =\n        if let Some(cert_settings) = grpc_settings.certificate {\n            (\n                Some(cert_settings.cert_file),\n                Some(cert_settings.pkey_file),\n                cert_settings.cert_chain,\n            )\n        } else {\n            (None, None, None)\n        };\n\n    let rpc_timeout = Duration::from_secs(grpc_settings.request_handler_timeout_seconds);\n\n    GrpcInternalServerBuilder::new()\n        .with_components(\n            local_store().ok_or(anyhow!(\n                \"Cannot configure gRPC internal server, no local store\"\n            ))?,\n            immutable_store,\n            mutable_store,\n            notification_sender,\n            hook_dispatcher,\n            settings.environment.clone().unwrap_or_default(),\n        )?\n        .with_tls_config(cert_path, key_path, cert_chain_path)?\n        .with_http2_config(\n            grpc_settings\n                .http2_keepalive_interval_seconds\n                .map(Duration::from_secs),\n            grpc_settings\n                .http2_keepalive_timeout_seconds\n                .map(Duration::from_secs),\n            user_agent_filter,\n            rpc_timeout,","sourceCodeStart":598,"sourceCodeEnd":634,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L598-L634","documentation":"Thrown by launch_grpc_internal_server when local_store() returns None at builder time. GrpcInternalServerBuilder.with_components requires a concrete local store as its first component; without one the internal server cannot be assembled and startup fails.","triggerScenarios":"launch_grpc_internal_server runs after store configuration but the local store was never initialized/registered (local_store() yields None) when building the internal gRPC server.","commonSituations":"Store configuration failed earlier or was skipped (e.g. remote-only store mode) so no local store exists; initialization ordering bug where the internal server starts before stores are set up.","solutions":["Ensure the local store is configured and initialized before launch_grpc_internal_server is invoked.","Check that store configuration (e.g. configure_immutable_store_via_plugin / mutable store setup) succeeded earlier in startup.","Review startup ordering so store wiring happens before internal gRPC server launch."],"exampleFix":"// before\nlet local = local_store(); // None, store never configured\n\n// after\nconfigure_local_store(&settings).await?; // initialize first\nlet local = local_store().ok_or_else(|| anyhow!(\"Cannot configure gRPC internal server, no local store\"))?;","handlingStrategy":"try-catch","validationCode":"let local = local_store().ok_or_else(|| anyhow!(\"no local store configured; cannot start internal gRPC server\"))?;","typeGuard":null,"tryCatchPattern":"match launch_grpc_internal_server(...) {\n    Err(e) if e.to_string().contains(\"no local store\") => {\n        eprintln!(\"store initialization failed or was skipped; fix store config/order: {e}\");\n    }\n    other => other?,\n}","preventionTips":["Initialize and register the local store before launching any gRPC servers.","Fail fast on store-configuration errors so later stages never run half-wired.","Enforce a linear startup order: settings -> stores -> servers."],"tags":["grpc","store","initialization","startup"],"backgroundTag":"missing-dependency","analyzedSha":"074eb0b0d1194c997d7cf28b55519e3e197b3e23","analyzedAt":"2026-09-13T09:00:57.509Z","contentChangedAt":"2026-09-13T09:00:57.509Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}