hyperledger/fabric · error
bad config metadata option RequestAutoRemoveTimeout
Error message
bad config metadata option RequestAutoRemoveTimeout
What it means
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.
Source
Thrown at orderer/consensus/smartbft/util/util.go:41
if options == nil {
return config, errors.New("config metadata options field is nil")
}
config.RequestBatchMaxCount = options.RequestBatchMaxCount
config.RequestBatchMaxBytes = options.RequestBatchMaxBytes
if config.RequestBatchMaxInterval, err = time.ParseDuration(options.RequestBatchMaxInterval); err != nil {
return config, errors.Wrap(err, "bad config metadata option RequestBatchMaxInterval")
}
config.IncomingMessageBufferSize = options.IncomingMessageBufferSize
config.RequestPoolSize = options.RequestPoolSize
if config.RequestForwardTimeout, err = time.ParseDuration(options.RequestForwardTimeout); err != nil {
return config, errors.Wrap(err, "bad config metadata option RequestForwardTimeout")
}
if config.RequestComplainTimeout, err = time.ParseDuration(options.RequestComplainTimeout); err != nil {
return config, errors.Wrap(err, "bad config metadata option RequestComplainTimeout")
}
if config.RequestAutoRemoveTimeout, err = time.ParseDuration(options.RequestAutoRemoveTimeout); err != nil {
return config, errors.Wrap(err, "bad config metadata option RequestAutoRemoveTimeout")
}
if config.ViewChangeResendInterval, err = time.ParseDuration(options.ViewChangeResendInterval); err != nil {
return config, errors.Wrap(err, "bad config metadata option ViewChangeResendInterval")
}
if config.ViewChangeTimeout, err = time.ParseDuration(options.ViewChangeTimeout); err != nil {
return config, errors.Wrap(err, "bad config metadata option ViewChangeTimeout")
}
if config.LeaderHeartbeatTimeout, err = time.ParseDuration(options.LeaderHeartbeatTimeout); err != nil {
return config, errors.Wrap(err, "bad config metadata option LeaderHeartbeatTimeout")
}
config.LeaderHeartbeatCount = options.LeaderHeartbeatCount
if config.CollectTimeout, err = time.ParseDuration(options.CollectTimeout); err != nil {
return config, errors.Wrap(err, "bad config metadata option CollectTimeout")
}
config.SyncOnStart = options.SyncOnStart
config.SpeedUpViewChange = options.SpeedUpViewChange
if options.LeaderRotation != smartbft.Options_ROTATION_ON {View on GitHub (pinned to 2736b63f8f)
Solutions
- Set RequestAutoRemoveTimeout to a valid duration string
- Fix the smartbft options in the channel config
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at orderer/consensus/smartbft/util/util.go:41 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/9116be50aa9e4574.
Report an issue: GitHub.