{"record":{"id":"0e8a4e0dc95062ff","repo":"EpicGames/lore","slug":"unsupported-lore-io-backend-other-supported-supported","errorCode":null,"errorMessage":"unsupported LORE_IO_BACKEND \"{other}\" (supported: {SUPPORTED_BACKENDS})","messagePattern":"unsupported LORE_IO_BACKEND \"(.+?)\" \\(supported: (.+?)\\)","errorType":"validation","errorClass":"io::Error","httpStatus":null,"severity":"error","filePath":"lore-io/src/driver.rs","lineNumber":137,"sourceCode":"/// nor the completion port's has been profiled under the suite's access pattern.\n/// [`BackendKind::Uring`], [`BackendKind::Iocp`] and `LORE_IO_BACKEND` select them explicitly, which\n/// is how that investigation gets its A/B without a code change. `lore-io/BENCHMARKS.md` has the\n/// per-case numbers.\nfn probe() -> DriverInner {\n    DriverInner::Psync(PsyncDriver)\n}\n\n/// Parses a `LORE_IO_BACKEND` value. Separate from reading the variable so the accepted set and\n/// the error are testable without a process-global environment.\nfn backend_kind_from_value(value: &str) -> std::io::Result<BackendKind> {\n    match value.to_ascii_lowercase().as_str() {\n        \"\" | \"auto\" => Ok(BackendKind::Auto),\n        \"psync\" => Ok(BackendKind::Psync),\n        #[cfg(target_os = \"linux\")]\n        \"uring\" => Ok(BackendKind::Uring),\n        #[cfg(target_family = \"windows\")]\n        \"iocp\" => Ok(BackendKind::Iocp),\n        other => Err(std::io::Error::new(\n            std::io::ErrorKind::InvalidInput,\n            format!(\"unsupported LORE_IO_BACKEND \\\"{other}\\\" (supported: {SUPPORTED_BACKENDS})\"),\n        )),\n    }\n}\n\n/// A file I/O driver instance dispatching to one backend.\n///\n/// Cloning is cheap and clones share the backend. Most code uses\n/// [`IoDriver::global`]; tests and benchmarks construct instances per\n/// backend.\n#[derive(Clone)]\npub struct IoDriver {\n    inner: Arc<DriverInner>,\n}\n\nimpl std::fmt::Debug for IoDriver {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-io/src/driver.rs#L119-L155","documentation":"`backend_kind_from_value` parses the `LORE_IO_BACKEND` environment variable and only accepts \"\"/\"auto\", \"psync\", plus platform-specific \"uring\" (Linux) or \"iocp\" (Windows). Any other value yields InvalidInput with the list of backends supported by the current build, so an invalid or platform-unsupported backend name is rejected loudly at driver construction.","triggerScenarios":"Setting `LORE_IO_BACKEND` to a misspelled or nonexistent backend name, or to \"iocp\" on Linux / \"uring\" on Windows or another non-Linux, non-Windows platform, then constructing an IoDriver via `from_env`.","commonSituations":"Copy-pasting `LORE_IO_BACKEND=uring` from a Linux benchmark into a Windows/macOS environment; typos like \"io_uring\", \"IOCP\", or \"psync \" with trailing whitespace (note the value is lowercased but not trimmed for unknown names — actually `to_ascii_lowercase` keeps whitespace, so \" psync\" fails); CI images where the build feature for the backend is disabled.","solutions":["Set `LORE_IO_BACKEND` to one of the listed supported values: \"auto\", \"psync\", \"uring\" (Linux only), or \"iocp\" (Windows only); or unset it / set it to \"auto\" to probe.","Check for typos and surrounding whitespace/case issues in the environment variable (e.g. \"io_uring\" is not accepted; use \"uring\").","If you need a platform-specific backend, run on that platform or use a build with the backend's cfg target enabled."],"exampleFix":"// before\nexport LORE_IO_BACKEND=io_uring\n// after\nexport LORE_IO_BACKEND=uring   # Linux builds only; use \"auto\" to be platform-neutral","handlingStrategy":"validation","validationCode":"// Rust: validate LORE_IO_BACKEND before constructing the driver\nfn backend_supported(v: &str) -> bool {\n    matches!(\n        v.to_ascii_lowercase().as_str(),\n        \"\" | \"auto\" | \"psync\" | \"uring\" | \"iocp\" // uring: linux-only, iocp: windows-only\n    )\n}","typeGuard":null,"tryCatchPattern":"// Rust\nmatch IoDriver::from_env() {\n    Err(e) if e.kind() == std::io::ErrorKind::InvalidInput\n        && e.to_string().contains(\"LORE_IO_BACKEND\") =>\n    {\n        eprintln!(\"{e}; falling back to default backend\");\n        IoDriver::new()\n    }\n    r => r?,\n}","preventionTips":["Use \"auto\" (or unset the variable) unless you are deliberately A/B-testing a backend.","Remember backend availability is platform-scoped: uring = Linux, iocp = Windows.","Sanitize the env var (trim + lowercase) in deployment scripts before export."],"tags":["env-var","config","io","platform"],"backgroundTag":"invalid-env-var-value","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"}