hyperledger/fabric · error

received bad status %v from orderer

Error message

received bad status %v from orderer

What it means

Returned by BlockReceiver.processMsg when the orderer's DeliverResponse carries a status other than SUCCESS (e.g. NOT_FOUND, SERVICE_UNAVAILABLE) for a seek request. It means the orderer refused or could not serve the delivery request for that channel.

Source

Thrown at common/deliverclient/blocksprovider/block_receiver.go:136

			break RecvLoop
		}
	}

	// cancel the sending side and wait for the `Start` goroutine to exit
	br.cancelSendFunc()
	<-br.recvC

	return err
}

func (br *BlockReceiver) processMsg(msg *orderer.DeliverResponse) (uint64, *common.Config, error) {
	switch t := msg.GetType().(type) {
	case *orderer.DeliverResponse_Status:
		if t.Status == common.Status_SUCCESS {
			return 0, nil, errors.Errorf("received success for a seek that should never complete")
		}

		return 0, nil, errors.Errorf("received bad status %v from orderer", t.Status)
	case *orderer.DeliverResponse_Block:
		blockNum := t.Block.Header.Number

		if err := br.updatableBlockVerifier.VerifyBlock(t.Block); err != nil {
			return 0, nil, errors.WithMessagef(err, "block [%d] from orderer [%s] could not be verified", blockNum, br.endpoint.String())
		}

		err := br.blockHandler.HandleBlock(br.channelID, t.Block)
		if err != nil {
			return 0, nil, errors.WithMessagef(err, "block [%d] from orderer [%s] could not be handled", blockNum, br.endpoint.String())
		}

		br.logger.Debugf("Handled block %d", blockNum)

		var channelConfig *common.Config
		if protoutil.IsConfigBlock(t.Block) {
			configEnv, err := deliverclient.ConfigFromBlock(t.Block)
			if err != nil {

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Decode the status code in the error to find the refusal reason (wrong channel, missing block, busy orderer)
  2. Retry against another orderer endpoint after fixing the underlying cause
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at common/deliverclient/blocksprovider/block_receiver.go:136 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/af7c7fc1fa54b25d. Report an issue: GitHub.