{"record":{"id":"0e11e8b5a375cd02","repo":"hyperledger/fabric","slug":"errsystemchannelexists","errorCode":"ErrSystemChannelExists","errorMessage":"system channel exists","messagePattern":"system channel exists","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/types/errors.go","lineNumber":14,"sourceCode":"/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\n\npackage 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","sourceCodeStart":1,"sourceCodeEnd":32,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/types/errors.go#L1-L32","documentation":"ErrSystemChannelExists is returned when a client tries to join or remove an application channel while a system channel still exists on the orderer. With a system channel present, only GET operations are allowed on application channels, so the REST handler maps this to 405 Method Not Allowed.","triggerScenarios":"POST /participation/v1/channels (join) or DELETE (remove) for an app channel while the orderer is bootstrapped with a system channel; also surfaced via sendJoinError and sendUpdateError.","commonSituations":"Upgrading from a 2.x deployment bootstrapped with a system channel and trying to manage app channels with osnadmin; forgetting to remove the system channel before using channel participation.","solutions":["Remove the system channel ('osnadmin channel remove' on the system channel, or rebootstrap without systemChannel) then join app channels","Upgrade to Fabric where the system channel is deprecated/removed and re-bootstrap the orderer without a system channel genesis block","While the system channel exists, manage app channels only via the legacy chain creation flow; GET is allowed to list channels"],"exampleFix":"// before\nosnadmin channel join --channelID mychannel --config-block app.block  # 405: system channel exists\n// after\nosnadmin channel remove --channelID test-system-channel  # remove system channel first\nosnadmin channel join --channelID mychannel --config-block app.block","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"resp, err := client.JoinChannel(cfg)\nif errors.Is(err, types.ErrSystemChannelExists) {\n    // only GET allowed; remove the system channel first\n}","preventionTips":["Deploy Fabric without a system channel (channel participation model)","Before joining app channels, confirm no system channel exists ('osnadmin channel list')","Plan the system-channel removal step in upgrade runbooks"],"tags":["fabric","orderer","system-channel","channel-participation","http-405"],"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"}