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

  1. Re-create or re-join the channel with a valid configuration containing an orderer group
  2. 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.