{"record":{"id":"8a0573439b6d1833","repo":"hyperledger/fabric","slug":"errappchannelsalreadyexists","errorCode":"ErrAppChannelsAlreadyExists","errorMessage":"application channels already exist","messagePattern":"application channels already exist","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/types/errors.go","lineNumber":25,"sourceCode":"package types\n\nimport \"github.com/pkg/errors\"\n\n// ErrSystemChannelExists is returned when trying to join or remove an application channel when the system channel exists.\n//\n// Deprecated: system channel no longer supported\nvar ErrSystemChannelExists = errors.New(\"system channel exists\")\n\n// ErrSystemChannelNotSupported is returned when trying to join with a system channel config block.\nvar ErrSystemChannelNotSupported = errors.New(\"system channel not supported\")\n\n// ErrChannelAlreadyExists is returned when trying to join a app channel that already exists (when the system channel does not\n// exist), or when trying to join the system channel when it already exists.\nvar ErrChannelAlreadyExists = errors.New(\"channel already exists\")\n\n// ErrAppChannelsAlreadyExists is returned when trying to join a system channel (that does not exist) when application channels\n// already exist.\nvar ErrAppChannelsAlreadyExists = errors.New(\"application channels already exist\")\n\n// ErrChannelNotExist is returned when trying to remove or list a channel that does not exist\nvar ErrChannelNotExist = errors.New(\"channel does not exist\")\n\n// ErrChannelPendingRemoval is returned when trying to remove or list a channel that is being removed.\nvar ErrChannelPendingRemoval = errors.New(\"channel pending removal\")\n\n// ErrChannelRemovalFailure is returned when a removal attempt failure has been recorded.\nvar ErrChannelRemovalFailure = errors.New(\"channel removal failure\")\n\n// ErrChannelNotReady is returned when trying to update a channel that is a follower\nvar ErrChannelNotReady = errors.New(\"channel is not ready, he is a follower\")\n","sourceCodeStart":7,"sourceCodeEnd":38,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/types/errors.go#L7-L38","documentation":"ErrAppChannelsAlreadyExists is returned when a client tries to join a (non-existent) system channel while application channels are already joined on the orderer. Mixing system-channel bootstrap with existing app channels is forbidden; the REST handler maps it to 403 Forbidden.","triggerScenarios":"POST /participation/v1/channels for a system-channel config block when the orderer already has application channels joined and no system channel exists.","commonSituations":"During migration, operators attempt to re-establish a deprecated system channel after app channels have already been created via channel participation.","solutions":["Do not join a system channel; it is deprecated — join application channels directly instead","If a system channel must exist (legacy), start from a clean orderer (no app channels) and bootstrap the system channel via orderer genesis, not osnadmin","Remove/re-provision the orderer for a consistent deployment model"],"exampleFix":"// before\nosnadmin channel join --channelID test-system-channel --config-block sys.block  # 403\n// after\nosnadmin channel join --channelID mychannel --config-block app.block  # join app channels only","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"if errors.Is(err, types.ErrAppChannelsAlreadyExists) {\n    // cannot join a system channel once app channels exist; abort legacy flow\n}","preventionTips":["Do not attempt to join system channels with channel participation","Pick one deployment model (app channels only) and stick to it","Re-bootstrap orderers rather than mixing system/app channel models"],"tags":["fabric","orderer","system-channel","channel-participation","http-403"],"backgroundTag":"system-channel-not-supported","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}