hyperledger/fabric · error

current config has orderer section, but new config does not

Error message

current config has orderer section, but new config does not

What it means

Config-update sanity check in Bundle.ValidateNew: the current channel config has an Orderer group but the proposed new config does not, which would silently delete the orderer section — not permitted.

Source

Thrown at common/channelconfig/bundle.go:85

// ApplicationConfig returns the configtxapplication.SharedConfig for the channel
// and whether the Application config exists.
func (b *Bundle) ApplicationConfig() (Application, bool) {
	result := b.channelConfig.ApplicationConfig()
	return result, result != nil
}

// ConfigtxValidator returns the configtx.Validator for the channel.
func (b *Bundle) ConfigtxValidator() configtx.Validator {
	return b.configtxManager
}

// ValidateNew checks if a new bundle's contained configuration is valid to be derived from the current bundle.
// This allows checks of the nature "Make sure that the consensus type did not change".
func (b *Bundle) ValidateNew(nb Resources) error {
	if oc, ok := b.OrdererConfig(); ok {
		noc, ok := nb.OrdererConfig()
		if !ok {
			return errors.New("current config has orderer section, but new config does not")
		}

		// Prevent consensus-type migration when channel capabilities ConsensusTypeMigration is disabled
		if !b.channelConfig.Capabilities().ConsensusTypeMigration() {
			if oc.ConsensusType() != noc.ConsensusType() {
				return errors.Errorf("attempted to change consensus type from %s to %s",
					oc.ConsensusType(), noc.ConsensusType())
			}
		}

		// When we move to capability V3_0 we insist on per Org endpoints for every org
		isOldV3 := b.ChannelConfig().Capabilities().ConsensusTypeBFT()
		isNewV3 := nb.ChannelConfig().Capabilities().ConsensusTypeBFT()
		if !isOldV3 && isNewV3 {
			for _, org := range noc.Organizations() {
				if len(org.Endpoints()) == 0 {
					return errors.Errorf("illegal orderer config update detected: endpoints of org %s are missing", org.Name())
				}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Include the full Orderer group in the new config being submitted
  2. If decommissioning orderers is intended, remove them via supported config-update procedures, not by dropping the group
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at common/channelconfig/bundle.go:85 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/34909516d166e0b3. Report an issue: GitHub.