hyperledger/fabric · error
failed pulling block %d
Error message
failed pulling block %d
What it means
getBlocksFromSyncBuffer guard: the synchronization loop finished but lastPulledBlock is still nil — not a single block could be pulled from the sync buffer despite a non-empty target height. The message names the block sequence that was being fetched.
Source
Thrown at orderer/consensus/smartbft/synchronizer_bft.go:274
s.Logger.Debugf("Fetched and committed config block [%d] from cluster", seq)
} else {
s.Support.WriteBlockSync(block, nil)
s.Logger.Debugf("Fetched and committed block [%d] from cluster", seq)
}
lastPulledBlock = block
prevInLatestDecision := s.lastReconfig.InLatestDecision
s.lastReconfig = s.OnCommit(lastPulledBlock)
s.lastReconfig.InLatestDecision = s.lastReconfig.InLatestDecision || prevInLatestDecision
s.Logger.Debugf("Last reconfig %+v", s.lastReconfig)
seq++
blocksFetched++
}
s.syncBuff.Stop()
if lastPulledBlock == nil {
return nil, errors.Errorf("failed pulling block %d", seq)
}
s.Logger.Infof("Finished synchronizing with cluster, fetched %d blocks, starting from block [%d], up until and including block [%d]",
blocksFetched, startHeight, lastPulledBlock.Header.Number)
return lastPulledBlock, nil
}
View on GitHub (pinned to 2736b63f8f)
Solutions
- Check connectivity to the deliver sources (other consenters)
- Retry synchronization when the cluster is healthier
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at orderer/consensus/smartbft/synchronizer_bft.go:274 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/ffb55d12120577b1.
Report an issue: GitHub.