redis/redis-py · error · SlotNotCoveredError
{len(uncovered)} shard channel(s) left unreconciled; slot(s)
Error message
{len(uncovered)} shard channel(s) left unreconciled; slot(s) not covered by the cluster: {uncovered!r} What it means
Error "{len(uncovered)} shard channel(s) left unreconciled; slot(s) not covered by the cluster: {uncovered!r}" thrown in redis/redis-py.
Source
Thrown at redis/cluster.py:3338
e,
)
if first_migrate_error is None:
first_migrate_error = e
continue
# Garbage-collect per-node pubsubs that no longer hold any
# subscription so their connections are released.
for name, pubsub in list(self.node_pubsub_mapping.items()):
if not pubsub.subscribed:
try:
pubsub.reset()
except Exception:
pass
self.node_pubsub_mapping.pop(name, None)
if uncovered:
# Surface the uncovered channels so the caller (and observer
# notification path) knows reconciliation was incomplete. All
# coverable siblings have already been migrated above.
raise SlotNotCoveredError(
f"{len(uncovered)} shard channel(s) left unreconciled; "
f"slot(s) not covered by the cluster: {uncovered!r}"
)
if first_migrate_error is not None and not made_progress:
# Every migration attempted in this pass failed transiently and
# nothing else made progress. Re-raise the first caught error
# (typically the root cause; later failures are often downstream
# symptoms of the same unreachable node) so the worker's done-
# callback surfaces a single representative failure through the
# same logger channel used for SlotNotCoveredError. Per-channel
# WARNINGs above preserve the full forensic detail.
raise first_migrate_error
def _migrate_shard_channel(self, channel, handler, old_name, new_node):
# Detach from the old per-node pubsub, best-effort: the old node may
# already be unreachable during migration / failover.
if old_name and old_name in self.node_pubsub_mapping:
old_pubsub = self.node_pubsub_mapping[old_name]View on GitHub (pinned to da03cdc7e8)
When it happens
Trigger: Thrown at redis/cluster.py:3338 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of redis/redis-py@da03cdc7e8 (2026-08-04).
Data as JSON: /data/errors/471d16fc9519f7e8.json.
Report an issue: GitHub.