{"record":{"id":"9116be50aa9e4574","repo":"hyperledger/fabric","slug":"bad-config-metadata-option-requestautoremovetimeou","errorCode":null,"errorMessage":"bad config metadata option RequestAutoRemoveTimeout","messagePattern":"bad config metadata option RequestAutoRemoveTimeout","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/smartbft/util/util.go","lineNumber":41,"sourceCode":"\tif options == nil {\n\t\treturn config, errors.New(\"config metadata options field is nil\")\n\t}\n\n\tconfig.RequestBatchMaxCount = options.RequestBatchMaxCount\n\tconfig.RequestBatchMaxBytes = options.RequestBatchMaxBytes\n\tif config.RequestBatchMaxInterval, err = time.ParseDuration(options.RequestBatchMaxInterval); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option RequestBatchMaxInterval\")\n\t}\n\tconfig.IncomingMessageBufferSize = options.IncomingMessageBufferSize\n\tconfig.RequestPoolSize = options.RequestPoolSize\n\tif config.RequestForwardTimeout, err = time.ParseDuration(options.RequestForwardTimeout); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option RequestForwardTimeout\")\n\t}\n\tif config.RequestComplainTimeout, err = time.ParseDuration(options.RequestComplainTimeout); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option RequestComplainTimeout\")\n\t}\n\tif config.RequestAutoRemoveTimeout, err = time.ParseDuration(options.RequestAutoRemoveTimeout); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option RequestAutoRemoveTimeout\")\n\t}\n\tif config.ViewChangeResendInterval, err = time.ParseDuration(options.ViewChangeResendInterval); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option ViewChangeResendInterval\")\n\t}\n\tif config.ViewChangeTimeout, err = time.ParseDuration(options.ViewChangeTimeout); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option ViewChangeTimeout\")\n\t}\n\tif config.LeaderHeartbeatTimeout, err = time.ParseDuration(options.LeaderHeartbeatTimeout); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option LeaderHeartbeatTimeout\")\n\t}\n\tconfig.LeaderHeartbeatCount = options.LeaderHeartbeatCount\n\tif config.CollectTimeout, err = time.ParseDuration(options.CollectTimeout); err != nil {\n\t\treturn config, errors.Wrap(err, \"bad config metadata option CollectTimeout\")\n\t}\n\tconfig.SyncOnStart = options.SyncOnStart\n\tconfig.SpeedUpViewChange = options.SpeedUpViewChange\n\n\tif options.LeaderRotation != smartbft.Options_ROTATION_ON {","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/smartbft/util/util.go#L23-L59","documentation":"Returned by ConfigFromMetadataOptions when time.ParseDuration fails on the consensus metadata's RequestAutoRemoveTimeout value. It means the SmartBFT option in the channel config's orderer consensus section is not a valid Go duration string (empty, wrong units, or non-numeric), so the SmartBFT config cannot be derived from the metadata.","triggerScenarios":"Thrown at orderer/consensus/smartbft/util/util.go:41 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set RequestAutoRemoveTimeout to a valid duration string","Fix the smartbft options in the channel config"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}