FuelLabs/fuel-core · error · anyhow::Error
Backlog unresolved at height {current_height}: repair error:
Error message
Backlog unresolved at height {current_height}: repair error: {e} What it means
Same repair path (crates/fuel-core/src/service/adapters/consensus_module/poa.rs:898-909): repair_sub_quorum_block itself returned Err({e}) — an I/O or Redis failure while re-proposing the block to the nodes — and since no earlier height had been reconciled in this round, the error is wrapped as 'Backlog unresolved … repair error' and aborts reconciliation.
Source
Thrown at crates/fuel-core/src/service/adapters/consensus_module/poa.rs:903
Ok(false) => {
tracing::warn!(
"Repair failed to reach quorum at height \
{current_height} — will retry next round"
);
if reconciled.is_empty() {
return Err(anyhow!(
"Backlog unresolved at height {current_height}: \
repair failed to reach quorum"
));
}
break;
}
Err(e) => {
tracing::warn!(
"Repair error at height {current_height}: {e}"
);
if reconciled.is_empty() {
return Err(anyhow!(
"Backlog unresolved at height {current_height}: \
repair error: {e}"
));
}
break;
}
}
}
} else {
if reconciled.is_empty() {
return Err(anyhow!(
"Backlog unresolved at height {current_height}: \
no winning block candidate"
));
}
break;
}
View on GitHub (pinned to b9d4d170da)
Solutions
- Inspect the wrapped {e} and the preceding 'Repair error at height …' warning to identify the failing node(s)
- Restore those nodes or the network path and let the next reconciliation round retry the repair
- Raise node_timeout if the writes are merely slow rather than failing
Defensive patterns
Strategy: retry
Try / catch
match unreconciled_blocks(next_height).await {
Err(e) if e.to_string().contains("repair error") => {
// the inner {e} names the failing node/op: address it, then the next
// reconciliation round retries the repair automatically
}
other => other,
} Prevention
- Watch 'Repair error at height …' warnings — they precede this error with node detail
- Keep node_timeout above worst-case multi-node write duration
- Stabilize the Redis cluster (no restarts/failovers) while backlog repair is pending
When it happens
Trigger: Connection failures or timeouts on enough nodes during the multi-node re-write that the repair call errors out entirely rather than completing with a false result.
Common situations: Redis outage starting mid-repair; transient network blip; node_timeout exceeded by the repair writes.
Related errors
- Timed out reading stream entries from Redis node
- Backlog unresolved at height {current_height}: repair failed
- Timed out while connecting to redis leader-lock node
- Timed out reading latest stream entry from Redis node
- Cannot reconcile: only {}/{} Redis nodes responded ({} faile
AI-assisted analysis of FuelLabs/fuel-core@b9d4d170da (2026-08-16).
Data as JSON: /api/errors/6889021d99874b7b.
Report an issue: GitHub.