{"record":{"id":"831555d3320074b4","repo":"hyperledger/fabric","slug":"no-cluster-members-to-synchronize-with-831555","errorCode":null,"errorMessage":"no cluster members to synchronize with","messagePattern":"no cluster members to synchronize with","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/smartbft/synchronizer_bft.go","lineNumber":153,"sourceCode":"\t\treturn 0, \"\", errors.Wrap(err, \"cannot get create BlockPuller\")\n\t}\n\tdefer blockPuller.Close()\n\n\theightByEndpoint, myEndpoint, err := blockPuller.HeightsByEndpoints()\n\tif err != nil {\n\t\treturn 0, \"\", errors.Wrap(err, \"cannot get HeightsByEndpoints\")\n\t}\n\n\ts.Logger.Infof(\"HeightsByEndpoints: %+v, my endpoint: %s\", heightByEndpoint, myEndpoint)\n\n\tdelete(heightByEndpoint, myEndpoint)\n\tvar heights []uint64\n\tfor _, value := range heightByEndpoint {\n\t\theights = append(heights, value)\n\t}\n\n\tif len(heights) == 0 {\n\t\treturn 0, \"\", errors.New(\"no cluster members to synchronize with\")\n\t}\n\n\ttargetHeight := s.computeTargetHeight(heights)\n\ts.Logger.Infof(\"Detected target height: %d\", targetHeight)\n\treturn targetHeight, myEndpoint, nil\n}\n\n// computeTargetHeight compute the target height to synchronize to.\n//\n// heights: a slice containing the heights of accessible peers, length must be >0.\n// clusterSize: the cluster size, must be >0.\nfunc (s *BFTSynchronizer) computeTargetHeight(heights []uint64) uint64 {\n\tsort.Slice(heights, func(i, j int) bool { return heights[i] > heights[j] }) // Descending\n\tclusterSize := len(s.Support.SharedConfig().Consenters())\n\tf := uint64(clusterSize-1) / 3 // The number of tolerated byzantine faults\n\tlenH := uint64(len(heights))\n\n\ts.Logger.Debugf(\"Cluster size: %d, F: %d, Heights: %v\", clusterSize, f, heights)","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/smartbft/synchronizer_bft.go#L135-L171","documentation":"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.","triggerScenarios":"Thrown at orderer/consensus/smartbft/synchronizer_bft.go:153 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check network connectivity and cluster TLS to the other consenters","Verify the other orderers in the channel are running","Retry once the cluster recovers"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}