EpicGames/lore · error
Notification plugin receiver background task failed
Error message
Notification plugin receiver background task failed: {e} What it means
Notification plugins can hand back long-lived receiver background tasks. The server spawns each one into the endpoints JoinSet; if such a task completes with an Err, the join result is mapped to this error naming the underlying failure.
Solutions
- Inspect the wrapped inner error ({e}) to identify the receiver's actual failure (bind error, connection error, etc.)
- Fix the underlying resource issue (free the port, restore connectivity, correct credentials)
- Check the plugin config in [plugins.<name>] and restart the server; add monitoring/restart policy for the endpoints JoinSet
Defensive patterns
Strategy: try-catch
Try / catch
lore_spawn!(endpoints, async move {
task.await.map_err(|e| anyhow::anyhow!("Notification plugin receiver background task failed: {e}"))
});
// consume JoinSet results and restart/alert on Err:
while let Some(res) = endpoints.join_next().await {
if let Err(e) = res? { error!("receiver failed: {e}; restarting plugin receiver"); }
} Prevention
- Pre-check that receiver bind addresses/ports are free before startup
- Add supervision/restart logic for notification receiver tasks
- Monitor the endpoints JoinSet for completed tasks and alert on failures
When it happens
Trigger: A running notification plugin receiver task (e.g. a webhook listener or queue consumer) terminates with an error at runtime — bind failure, dropped connection, handler panic captured as Err — surfacing through task.await in configure_notification's spawned wrapper.
Common situations: Port already in use for a listening receiver; upstream service (e.g. message broker) unreachable; receiver task erroring after config/network changes while the server is up.
Related errors
- Failed to create notification plugin
- Failed to create immutable store plugin
- Failed to create mutable store plugin
- Failed to create lock store plugin
- Failed to create immutable store
AI-assisted analysis of EpicGames/lore@074eb0b0d1 (2026-09-13).
Data as JSON: /api/errors/f381869732423e20.
Report an issue: GitHub.
Appendix: source
Thrown at lore-server/src/server.rs:1495
.unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));
let context = NotificationPluginContext {
environment: environment.clone(),
immutable_store: immutable_store.cloned(),
};
let output = registry
.create_notification(plugin_name, &plugin_config, &context)
.await
.map_err(|e| {
anyhow::anyhow!("Failed to create notification plugin '{plugin_name}': {e}")
})?;
// Spawn background tasks for the receiver tasks from the plugin
for task in output.receivers {
lore_spawn!(endpoints, async move {
task.await.map_err(|e| {
anyhow::anyhow!("Notification plugin receiver background task failed: {e}")
})
});
}
Ok((output.sender, None))
}
}
}
#[cfg(target_os = "linux")]
async fn log_base_address() {
use tracing::warn;
let executable =
match std::env::current_exe().map(|executable| executable.to_str().map(|s| s.to_owned())) {
Ok(executable) => executable,
Err(e) => {
warn!("Could not get path to current executable: {e:?}");View on GitHub (pinned to 074eb0b0d1)