Impact
Two checks in the System Overview health panel, Certificates and OpenSearch Version (both under Search Cluster), can be blocked on MongoDB reads that the health plugin cannot put a time limit on.
When one of those reads is slow or never returns, the check reports unknown instead of a definite state. An unknown check is dropped from the panel's rollup unless everything beside it is also unknown, so the section above it can stay green while a real problem goes unreported.
Why the plugin cannot fix this itself
Each check gets a fixed time budget, and the framework can only ignore a late answer, not stop the work behind it. So every check has to impose its own limit on the call it makes. Most MongoDB-backed checks do that with the driver's withTimeout, which bounds the whole operation including retries. These two cannot, because the collection is a private field rather than something the caller can reach.
What to do
Give each service a bounded read that a caller on a deadline can use. Either a timeout-carrying overload alongside the existing method, or expose a bounded read the callers can drive. Keep it additive so existing callers are untouched.
Dependencies
None. This touches AbstractNodeService and DataNodeMetadataServiceImpl only, and conflicts with nothing currently in flight. It is deliberately split out of #26886, whose ClusterAdapter half is blocked on #26885 and touches the three search client classes instead.
Consumers
Tracked on the Enterprise side in Graylog2/graylog-plugin-enterprise#15110, under "Bounded node registry reads".
Impact
Two checks in the System Overview health panel, Certificates and OpenSearch Version (both under Search Cluster), can be blocked on MongoDB reads that the health plugin cannot put a time limit on.
When one of those reads is slow or never returns, the check reports
unknowninstead of a definite state. Anunknowncheck is dropped from the panel's rollup unless everything beside it is also unknown, so the section above it can stay green while a real problem goes unreported.Why the plugin cannot fix this itself
Each check gets a fixed time budget, and the framework can only ignore a late answer, not stop the work behind it. So every check has to impose its own limit on the call it makes. Most MongoDB-backed checks do that with the driver's
withTimeout, which bounds the whole operation including retries. These two cannot, because the collection is a private field rather than something the caller can reach.What to do
Give each service a bounded read that a caller on a deadline can use. Either a timeout-carrying overload alongside the existing method, or expose a bounded read the callers can drive. Keep it additive so existing callers are untouched.
Dependencies
None. This touches
AbstractNodeServiceandDataNodeMetadataServiceImplonly, and conflicts with nothing currently in flight. It is deliberately split out of #26886, whoseClusterAdapterhalf is blocked on #26885 and touches the three search client classes instead.Consumers
Tracked on the Enterprise side in Graylog2/graylog-plugin-enterprise#15110, under "Bounded node registry reads".