hyperledger/fabric · error
failed to create block deliverer for channel `%s`, missing O
Error message
failed to create block deliverer for channel `%s`, missing OrdererConfig
What it means
StartDeliverForChannel built the channel config bundle but the OrdererConfig component was absent. The comment notes this should never happen because peer.createChannel() validates it earlier — its occurrence signals an inconsistent or corrupted channel configuration.
Source
Thrown at core/deliverservice/deliveryclient.go:127
return errors.New(errMsg)
}
if d.blockDeliverer != nil {
errMsg := fmt.Sprintf("block deliverer for channel `%s` already exists", chainID)
logger.Errorf("Delivery service: %s", errMsg)
return errors.New(errMsg)
}
// TODO save the initial bundle in the block deliverer in order to maintain a stand alone BlockVerifier that gets updated
// immediately after a config block is pulled and verified.
bundle, err := channelconfig.NewBundle(chainID, d.conf.ChannelConfig, d.conf.CryptoProvider)
if err != nil {
return errors.WithMessagef(err, "failed to create block deliverer for channel `%s`", chainID)
}
oc, ok := bundle.OrdererConfig()
if !ok {
// This should never happen because it is checked in peer.createChannel()
return errors.Errorf("failed to create block deliverer for channel `%s`, missing OrdererConfig", chainID)
}
switch ct := oc.ConsensusType(); ct {
case "etcdraft":
d.blockDeliverer, err = d.createBlockDelivererCFT(chainID, ledgerInfo)
case "BFT":
switch d.conf.DeliverServiceConfig.Policy {
case "cluster":
d.blockDeliverer, err = d.createBlockDelivererBFT(chainID, ledgerInfo)
case "simple":
d.blockDeliverer, err = d.createBlockDelivererCFT(chainID, ledgerInfo)
default:
err = errors.Errorf("unexpected delivey service policy: `%s`", d.conf.DeliverServiceConfig.Policy)
}
default:
err = errors.Errorf("unexpected consensus type: `%s`", ct)
}
View on GitHub (pinned to 2736b63f8f)
Solutions
- Re-create or re-join the channel with a valid configuration containing an orderer group
- Inspect the config block for a missing/orderer-free consensus section
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at core/deliverservice/deliveryclient.go:127 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/8165457ed4449425.
Report an issue: GitHub.