{"record":{"id":"3075822c99c45fd7","repo":"EpicGames/lore","slug":"missing-internal-quic-config","errorCode":null,"errorMessage":"Missing Internal QUIC config","messagePattern":"Missing Internal QUIC config","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":2103,"sourceCode":"                 clients\"\n            );\n        }\n        // Without mTLS the certificate is only there to satisfy the TLS\n        // handshake — peers connect over `quic://` and do not validate it — so\n        // an ephemeral one keeps the endpoint zero-config. Under mTLS the\n        // certificate is the authentication, and a generated one would be\n        // worthless, so that path keeps demanding a configured triple.\n        let generate_ephemeral_cert = security == EndpointSecurity::Untrusted;\n        lore_spawn!(endpoints, {\n            let immutable_store = immutable_store.clone();\n            let settings = settings.clone();\n            let shutdown_rx = _shutdown_rx.clone();\n            let user_agent_filter = user_agent_filter.clone();\n\n            let quic_settings = settings\n                .server\n                .quic_internal\n                .ok_or(anyhow!(\"Missing Internal QUIC config\"))?;\n            let request_handler_timeout = quic_settings\n                .handler_timeout_seconds\n                .map(Duration::from_secs);\n\n            let local_immutable_store = local_store().unwrap_or_else(|| {\n                warn!(\"No local store available for internal QUIC server, ImmutableLocal* opcodes will route to the main store\");\n                immutable_store.clone()\n            });\n\n            let process_limit = quic_settings\n                .stream_message_limit\n                .unwrap_or(replication_store_service::DEFAULT_CLIENT_MESSAGE_LIMIT);\n            let limits = AdmissionLimits {\n                process_limit,\n                inflight_limit: connection_inflight_limit(&quic_settings, process_limit),\n                handler_timeout: request_handler_timeout,\n                permit_timeout: quic_settings.permit_timeout_ms.map(Duration::from_millis),\n            };","sourceCodeStart":2085,"sourceCodeEnd":2121,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L2085-L2121","documentation":"The internal QUIC server reads its configuration from `settings.server.quic_internal` and aborts startup with this error when the field is None. The internal QUIC endpoint (used for ImmutableLocal* opcodes and internal traffic) needs explicit bind/TLS/timeout settings, so its absence is fatal.","triggerScenarios":"Launching the internal QUIC endpoint in `async_main` while the settings lack a `server.quic_internal` section, hitting `ok_or(anyhow!(\"Missing Internal QUIC config\"))`.","commonSituations":"New deployments that enable the internal endpoint but were set up from an older config that predated `quic_internal`; environments where only the public `server.quic` was configured; operators assuming the internal server inherits public QUIC settings.","solutions":["Add a `[server.quic_internal]` section to the settings file with the internal bind address and options.","Disable/remove the internal QUIC endpoint from the server's endpoint configuration if it is not used.","Note that the internal server does not fall back to `server.quic`; configure it explicitly."],"exampleFix":"// before\n[server.quic]\nbind = \"0.0.0.0:4433\"  # only public configured\n// after\n[server.quic_internal]\nbind = \"127.0.0.1:4434\"","handlingStrategy":"validation","validationCode":"// Rust: check internal QUIC config before enabling the internal endpoint\nif settings.server.endpoints.contains(&\"quic_internal\".into())\n    && settings.server.quic_internal.is_none()\n{\n    return Err(anyhow!(\"internal QUIC endpoint requires [server.quic_internal] settings\"));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not assume the internal server inherits public QUIC settings; always configure both explicitly.","Include quic_internal in config templates for any deployment using internal endpoints.","Document required config sections next to each endpoint flag."],"tags":["config","quic","startup"],"backgroundTag":"missing-required-config-field","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"}