hyperledger/fabric · error

ErrChannelNotExist

ErrChannelNotExist

Error message

channel does not exist

What it means

ErrChannelNotExist is returned when attempting to remove, update, or get info for a channel that the orderer does not know — it was never joined or has been removed. BroadcastChannelSupport and ChannelInfo also surface it; REST handlers map removal/update failures accordingly.

Source

Thrown at orderer/common/types/errors.go:28

// ErrSystemChannelExists is returned when trying to join or remove an application channel when the system channel exists.
//
// Deprecated: system channel no longer supported
var ErrSystemChannelExists = errors.New("system channel exists")

// ErrSystemChannelNotSupported is returned when trying to join with a system channel config block.
var ErrSystemChannelNotSupported = errors.New("system channel not supported")

// ErrChannelAlreadyExists is returned when trying to join a app channel that already exists (when the system channel does not
// exist), or when trying to join the system channel when it already exists.
var ErrChannelAlreadyExists = errors.New("channel already exists")

// ErrAppChannelsAlreadyExists is returned when trying to join a system channel (that does not exist) when application channels
// already exist.
var ErrAppChannelsAlreadyExists = errors.New("application channels already exist")

// ErrChannelNotExist is returned when trying to remove or list a channel that does not exist
var ErrChannelNotExist = errors.New("channel does not exist")

// ErrChannelPendingRemoval is returned when trying to remove or list a channel that is being removed.
var ErrChannelPendingRemoval = errors.New("channel pending removal")

// ErrChannelRemovalFailure is returned when a removal attempt failure has been recorded.
var ErrChannelRemovalFailure = errors.New("channel removal failure")

// ErrChannelNotReady is returned when trying to update a channel that is a follower
var ErrChannelNotReady = errors.New("channel is not ready, he is a follower")

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. List channels on that orderer ('osnadmin channel list') to confirm the channelID exists
  2. Fix the channelID spelling in the osnadmin command
  3. Join the channel first if it was never joined on this orderer
  4. For update (consenter change), join the channel with the new config block instead of updating a non-joined channel

Example fix

// before
osnadmin channel remove --channelID mychanel  # typo: channel does not exist
// after
osnadmin channel list
osnadmin channel remove --channelID mychannel
Defensive patterns

Strategy: try-catch

Validate before calling

info, err := client.ListChannels()
exists := slices.Contains(info.Channels, targetChannelID)
if !exists { /* join first or fix channelID */ }

Try / catch

if errors.Is(err, types.ErrChannelNotExist) {
    // channel never joined on this orderer; join it or correct the ID
}

Prevention

When it happens

Trigger: DELETE /participation/v1/channels/<id> or PUT (update) for a channelID never joined on this orderer; osnadmin remove/update against a channel that exists on other orderers but not this one.

Common situations: Typo in channelID; channel joined on some orderers only (consenter set mismatch); channel already removed; running remove before join in scripts.

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/e4805101c3c02adf. Report an issue: GitHub.