dgraph-io/dgraph · error
failed to get connection pool for group %d
Error message
failed to get connection pool for group %d
What it means
Raised in applyCommitted (worker/draft.go:730) while finishing external snapshot streaming: the node needs its group leader's connection pool to request a snapshot, but groups().Leader(n.gid) returns nil because no leader is known for this group.
Source
Thrown at worker/draft.go:730
x.ExtSnapshotStreamingState(true)
return nil
case proposal.ExtSnapshotState.DropData:
// When DropData is true, it implies that there was some issue with import (e.g. some group
// may have started streaming but not finished or streaming never started because p directory
// was not there). We can't be certain if we have disabled x.UpdateExtSnapshotStreamingState or
// not, so we are disabling it here:
x.ExtSnapshotStreamingState(false)
if err := posting.DeleteAll(); err != nil {
glog.Errorf("[import] failed to delete all data: %v", err)
return err
}
return nil
case proposal.ExtSnapshotState.Finish && x.IsExtSnapshotStreamingStateTrue():
lastApplied := n.Applied.LastIndex()
pl := groups().Leader(n.gid)
if pl == nil {
glog.Errorf("[import] failed to get connection pool for group %d", n.gid)
return errors.Errorf("failed to get connection pool for group %d", n.gid)
}
glog.Infof("[import] requesting snapshot from leader")
snap := &pb.Snapshot{
Context: n.RaftContext,
Index: lastApplied,
ReadTs: State.GetTimestamp(false),
}
// Request and populate snapshot
if err := n.populateSnapshot(snap, pl); err != nil {
glog.Errorf("[import] failed to populate snapshot for rejoining node: %v", err)
return errors.Wrapf(err, "failed to populate snapshot for rejoining node")
}
if err := postStreamProcessing(ctx); err != nil {
glog.Errorf("[import] failed to post stream processing for rejoining node: %v", err)
return errors.Wrapf(err, "failed to post stream processing for rejoining node")
}
glog.Infof("[import] successfully rejoined node")View on GitHub (pinned to 759e242be6)
Solutions
- Wait for group leadership to be (re-)established; Zero will re-elect and the streaming can resume — the proposal may be retried.
- Verify alphas can reach Zero and the leader on ports 5080/7080; fix connectivity.
- Restart the leaderless alpha(s) so they rejoin and refresh group membership.
- If Zero is down, restore Zero from its raft state and let membership converge before resuming imports.
Example fix
// operational fix, not code // ensure all alphas register with Zero: # dgraph alpha --zero=z1:5080 --my=alpha:7080 // and confirm leader exists: # dgraph zero --state (or) curl localhost:6080/state
Defensive patterns
Strategy: fallback
Validate before calling
if !groupHasLeader(gid) { waitForLeader(gid, timeout) } Try / catch
if err != nil && strings.Contains(err.Error(), "failed to get connection pool for group") {
time.Sleep(30 * time.Second)
return retryApplyOrResumeStreaming()
} Prevention
- Ensure alphas always register with reachable Zero instances.
- Monitor Zero's group membership for leaderless groups and alert.
- Check 5080/7080 connectivity between alphas and Zero/leader.
- Wait for elections to settle after restarts before resuming restore/import jobs.
When it happens
Trigger: An external snapshot completes (ExtSnapshotState.Finish) while the group has no leader — e.g. Zero hasn't assigned/confirmed a leader yet, the leader is down, or during a membership change after restore/import.
Common situations: Restoring into a cluster while Zero is still electing leaders; network partition between alphas and Zero; leader crash mid external-snapshot streaming.
Related errors
- cannot propose restore request
- Server is not leader of this group
- ReceivePredicate failed: Not the leader of group
- failed to initiate external snapshot stream: %v
- unable to reach quorum
AI-assisted analysis of dgraph-io/dgraph@759e242be6 (2026-09-01).
Data as JSON: /api/errors/e5b8362a14eb903e.
Report an issue: GitHub.