{"record":{"id":"492fb04a0f5a0c6f","repo":"hyperledger/fabric","slug":"leader-rotation-must-be-turned-off-for-this-versio","errorCode":null,"errorMessage":"leader rotation must be turned off for this version or be unspecified","messagePattern":"leader rotation must be turned off for this version or be unspecified","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/smartbft/configverifier.go","lineNumber":186,"sourceCode":"\n\tconsensusTypeConfigValue := conf.ChannelGroup.Groups[\"Orderer\"].Values[\"ConsensusType\"]\n\n\tif consensusTypeConfigValue == nil {\n\t\treturn fmt.Errorf(\"missing consensus type property in config\")\n\t}\n\n\tconsensusTypeValue := &protosorderer.ConsensusType{}\n\tif err := proto.Unmarshal(consensusTypeConfigValue.Value, consensusTypeValue); err != nil {\n\t\treturn fmt.Errorf(\"invalid consensus type property in config: %v\", err)\n\t}\n\n\tconfigOptions := &smartbft.Options{}\n\tif err := proto.Unmarshal(consensusTypeValue.Metadata, configOptions); err != nil {\n\t\treturn fmt.Errorf(\"invalid options encoded in consensus metadata: %v\", err)\n\t}\n\n\tif configOptions.LeaderRotation == smartbft.Options_ROTATION_ON {\n\t\treturn fmt.Errorf(\"leader rotation must be turned off for this version or be unspecified\")\n\t}\n\n\treturn nil\n}\n\nfunc (cbv *ConfigBlockValidator) verifyConfigUpdateMsg(outEnv *common.Envelope, confEnv *common.ConfigEnvelope, chdr *common.ChannelHeader) error {\n\tif confEnv == nil || confEnv.LastUpdate == nil || confEnv.Config == nil {\n\t\treturn errors.New(\"invalid config envelope\")\n\t}\n\tenvPayload, err := protoutil.UnmarshalPayload(confEnv.LastUpdate.Payload)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif envPayload.Header == nil {\n\t\treturn errors.New(\"inner header is nil\")\n\t}\n","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/smartbft/configverifier.go#L168-L204","documentation":"This SmartBFT version does not support leader rotation. If the decoded smartbft.Options has LeaderRotation set to Options_ROTATION_ON, the config update is rejected outright. LeaderRotation must be OFF or left unspecified.","triggerScenarios":"checkConsentersMatchPolicy sees configOptions.LeaderRotation == smartbft.Options_ROTATION_ON in the proposed ConsensusType metadata during config update validation.","commonSituations":"Operator enables leader rotation in the BFT options section of the profile or configtx.yaml; upgrading a channel whose old config had rotation enabled; copying example configs that enable rotation.","solutions":["Set LeaderRotation to Options_ROTATION_OFF (or omit it) in the ConsensusType metadata and re-submit the config update","Update the profile in configtx.yaml so the BFT options do not set rotation on","Regenerate the config with tooling from this Fabric version, which defaults rotation off"],"exampleFix":"// before\nopts := &smartbft.Options{LeaderRotation: smartbft.Options_ROTATION_ON}\n// after\nopts := &smartbft.Options{LeaderRotation: smartbft.Options_ROTATION_OFF}","handlingStrategy":"validation","validationCode":"if opts.LeaderRotation == smartbft.Options_ROTATION_ON {\n    return errors.New(\"leader rotation is not supported; set ROTATION_OFF or omit it\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Leave LeaderRotation unset in profiles for this Fabric version","Review release notes before enabling BFT options","Lint configtx.yaml BFT options against supported values"],"tags":["hyperledger-fabric","smartbft","leader-rotation","config-validation"],"backgroundTag":"unsupported-feature-configuration","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"}