{"record":{"id":"a80a0c5200908078","repo":"hyperledger/fabric","slug":"config-update-does-not-contain-the-s-value","errorCode":null,"errorMessage":"config update does not contain the %s value","messagePattern":"config update does not contain the (.+?) value","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/msgprocessor/maintenancefilter.go","lineNumber":198,"sourceCode":"\t\treturn errors.New(\"config update contains no changes\")\n\t}\n\n\tif len(configUpdate.WriteSet.Values) > 0 {\n\t\treturn errors.Errorf(\"config update contains changes to values in group %s\", channelconfig.ChannelGroupKey)\n\t}\n\n\tif len(configUpdate.WriteSet.Groups) > 1 {\n\t\treturn errors.New(\"config update contains changes to more than one group\")\n\t}\n\n\tif ordGroup, ok1 := configUpdate.WriteSet.Groups[channelconfig.OrdererGroupKey]; ok1 {\n\t\tif len(ordGroup.Groups) > 0 {\n\t\t\treturn errors.Errorf(\"config update contains changes to groups within the %s group\",\n\t\t\t\tchannelconfig.OrdererGroupKey)\n\t\t}\n\n\t\tif _, ok2 := ordGroup.Values[channelconfig.ConsensusTypeKey]; !ok2 {\n\t\t\treturn errors.Errorf(\"config update does not contain the %s value\", channelconfig.ConsensusTypeKey)\n\t\t}\n\n\t\tif len(ordGroup.Values) > 1 {\n\t\t\treturn errors.Errorf(\"config update contain more then just the %s value in the %s group\",\n\t\t\t\tchannelconfig.ConsensusTypeKey, channelconfig.OrdererGroupKey)\n\t\t}\n\t} else {\n\t\treturn errors.Errorf(\"update does not contain the %s group\", channelconfig.OrdererGroupKey)\n\t}\n\n\treturn nil\n}\n\nfunc validateBFTConsenterMapping(currentOrdererConfig channelconfig.Orderer, nextOrdererConfig channelconfig.Orderer) error {\n\t// extract raft consenters from consensusTypeValue.metadata\n\traftMetadata := &etcdraft.ConfigMetadata{}\n\tproto.Unmarshal(currentOrdererConfig.ConsensusMetadata(), raftMetadata)\n\traftConsenters := raftMetadata.GetConsenters()","sourceCodeStart":180,"sourceCodeEnd":216,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/msgprocessor/maintenancefilter.go#L180-L216","documentation":"During consensus-type migration, an update to the Orderer group must contain the ConsensusType value; this is the very change migration exists to perform. If the Orderer group is present in the WriteSet but has no consensus_type entry, the update is rejected because the orderer cannot determine the target consensus type or state transition.","triggerScenarios":"ensureConsensusTypeChangeOnly receives a configUpdate with an Orderer group in WriteSet.Groups whose Values map lacks channelconfig.ConsensusTypeKey — e.g. an update that only touches Orderer values like BatchSize or capabilities.","commonSituations":"Admins in maintenance mode submitting an update intended only to tweak other Orderer settings (BatchTimeout, BatchSize) instead of the ConsensusType value; automation that copies the wrong value into the delta.","solutions":["Add the consensus_type value (with the new consensus type and MAINTENANCE state) to the Orderer group's Values in the WriteSet.","Regenerate the config update using configtxlator so the delta includes the ConsensusType change.","If other Orderer values also changed, remove them — migration updates may only contain ConsensusType (see companion error for extra values)."],"exampleFix":"// before\nordGroup.Values[\"BatchSize\"] = changedValue // no ConsensusType\n// after\nordGroup.Values = map[string]*cb.ConfigValue{\n  \"ConsensusType\": {Value: encodedConsensusType},\n}","handlingStrategy":"validation","validationCode":"ord, ok := update.GetWriteSet().Groups[\"Orderer\"]\nif ok {\n    if _, hasCT := ord.Values[\"ConsensusType\"]; !hasCT {\n        return errors.New(\"migration update must include ConsensusType value\")\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always add the ConsensusType value (new type + state) to the Orderer group in maintenance-mode updates.","Use the official migration tooling/scripts instead of manual envelope construction.","Assert the delta contains the consensus_type key before signing and submitting."],"tags":["hyperledger-fabric","config-update","consensus-migration"],"backgroundTag":"config-update-rejected","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"}