hyperledger/fabric · error

no cluster members to synchronize with

Error message

no cluster members to synchronize with

What it means

BFTSynchronizer guard: after querying all remote endpoints for their ledger heights and removing its own endpoint, no other cluster members were reachable/known. A smartbft node cannot synchronize (or decide a target height) without at least one live peer in the channel.

Source

Thrown at orderer/consensus/smartbft/synchronizer_bft.go:153

		return 0, "", errors.Wrap(err, "cannot get create BlockPuller")
	}
	defer blockPuller.Close()

	heightByEndpoint, myEndpoint, err := blockPuller.HeightsByEndpoints()
	if err != nil {
		return 0, "", errors.Wrap(err, "cannot get HeightsByEndpoints")
	}

	s.Logger.Infof("HeightsByEndpoints: %+v, my endpoint: %s", heightByEndpoint, myEndpoint)

	delete(heightByEndpoint, myEndpoint)
	var heights []uint64
	for _, value := range heightByEndpoint {
		heights = append(heights, value)
	}

	if len(heights) == 0 {
		return 0, "", errors.New("no cluster members to synchronize with")
	}

	targetHeight := s.computeTargetHeight(heights)
	s.Logger.Infof("Detected target height: %d", targetHeight)
	return targetHeight, myEndpoint, nil
}

// computeTargetHeight compute the target height to synchronize to.
//
// heights: a slice containing the heights of accessible peers, length must be >0.
// clusterSize: the cluster size, must be >0.
func (s *BFTSynchronizer) computeTargetHeight(heights []uint64) uint64 {
	sort.Slice(heights, func(i, j int) bool { return heights[i] > heights[j] }) // Descending
	clusterSize := len(s.Support.SharedConfig().Consenters())
	f := uint64(clusterSize-1) / 3 // The number of tolerated byzantine faults
	lenH := uint64(len(heights))

	s.Logger.Debugf("Cluster size: %d, F: %d, Heights: %v", clusterSize, f, heights)

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Check network connectivity and cluster TLS to the other consenters
  2. Verify the other orderers in the channel are running
  3. Retry once the cluster recovers
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at orderer/consensus/smartbft/synchronizer_bft.go:153 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/831555d3320074b4. Report an issue: GitHub.