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

  1. Wait for group leadership to be (re-)established; Zero will re-elect and the streaming can resume — the proposal may be retried.
  2. Verify alphas can reach Zero and the leader on ports 5080/7080; fix connectivity.
  3. Restart the leaderless alpha(s) so they rejoin and refresh group membership.
  4. 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

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


AI-assisted analysis of dgraph-io/dgraph@759e242be6 (2026-09-01). Data as JSON: /api/errors/e5b8362a14eb903e. Report an issue: GitHub.