{"record":{"id":"74c5ceba13b77464","repo":"hyperledger/fabric","slug":"bad-config-metadata-option-requestforwardtimeout","errorCode":null,"errorMessage":"bad config metadata option RequestForwardTimeout","messagePattern":"bad config metadata option RequestForwardTimeout","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/smartbft/util/util.go","lineNumber":35,"sourceCode":"func ConfigFromMetadataOptions(selfID uint64, options *smartbft.Options) (types.Configuration, error) {\n\tvar err error\n\n\tconfig := types.DefaultConfig\n\tconfig.SelfID = selfID\n\n\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 {","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/smartbft/util/util.go#L17-L53","documentation":"Returned by ConfigFromMetadataOptions when time.ParseDuration fails on the smartbft options' RequestForwardTimeout string. The consensus config in the channel's orderer section holds a malformed duration for this option.","triggerScenarios":"Thrown at orderer/consensus/smartbft/util/util.go:35 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set RequestForwardTimeout to a valid duration string","Correct the consensus metadata and resubmit the 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-08T15:18:49.778Z"}