EpicGames/lore · error
Composite store not supported as a composite substore
Error message
Composite store not supported as a composite substore
What it means
Composite stores cannot themselves contain a composite substore; the implementation only supports local, remote, replicated, and plugin-provided modes as children. Requesting mode = "composite" for a substore is rejected outright at configuration time.
Solutions
- Flatten the nested composite configuration into a single-level list of local/remote/replicated subs tores
- Replace the nested composite substore with one of the supported modes or a plugin-provided store mode
- Pre-validate the substore mode list before server startup and reject 'composite' with a clearer message
Example fix
# before [[immutable_store.composite.outer.stores]] mode = "composite" # after [[immutable_store.composite.outer.stores]] mode = "local" [immutable_store.composite.outer.stores.local] path = "/data/store"
Defensive patterns
Strategy: validation
Validate before calling
for store in &composite.stores {
if store.mode == "composite" {
return Err("nested composite subs tores are not supported; flatten the configuration");
}
} Type guard
fn is_nestable_mode(mode: &str) -> bool {
matches!(mode, "local" | "remote" | "replicated")
} Try / catch
match configure_composite_substore(®istry, mode, &settings, sub).await {
Err(e) if e.to_string().contains("not supported as a composite substore") => {
eprintln!("flatten nested composite config for '{mode}'"); std::process::exit(2);
}
r => r?,
} Prevention
- Document that composition is single-level only
- Validate substore modes at config-load time, before server startup
- Never copy the outer composite block into its own stores list
When it happens
Trigger: A composite store's substore list contains an entry with mode = "composite"; configure_composite_substore hits the store_mode::COMPOSITE match arm and returns this error unconditionally, before touching any settings.
Common situations: Recursive config authoring mistake: nesting a composite block inside another composite's stores list expecting recursive composition; copy-paste of the outer store block into the subs tore list.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- [environment.endpoint] auth_url is set but [server.auth] is…
- [environment.endpoint] auth_url and [server.auth]…
- Maintenance TLS is partially configured: cert_file and…
- No alpns provided
- Missing QUIC certificate config
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/68fbab78d76b3ff0.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/server.rs:1422
) -> Result<Arc<dyn ImmutableStore>> {
match mode {
store_mode::LOCAL => {
let local_settings = settings
.local
.as_ref()
.ok_or(anyhow!("Missing composite local store settings"))?;
configure_local_immutable_store(local_settings).await
}
store_mode::REMOTE => {
let remote_settings = settings
.remote
.as_ref()
.ok_or(anyhow!("Missing composite remote store settings"))?;
configure_remote_immutable_store(remote_settings)
}
store_mode::COMPOSITE => Err(anyhow!(
"Composite store not supported as a composite substore"
)),
store_mode::REPLICATED => {
let replicated_settings = settings
.replicated
.as_ref()
.ok_or(anyhow!("Missing composite replicated store settings"))?;
configure_replicated_immutable_store(replicated_settings).await
}
_ => {
// All other modes use the plugin system
let plugin_config = resolve_plugin_config_with_fallback(
&global_settings.plugins,
mode,
"immutable_store",
)
.unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));View on GitHub (pinned to 074eb0b0d1)