You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by "Aled Sage (JIRA)" <ji...@apache.org> on 2015/09/28 12:32:04 UTC
[jira] [Created] (BROOKLYN-176) Expensive polling of
driver.isRunning is too frequent
Aled Sage created BROOKLYN-176:
----------------------------------
Summary: Expensive polling of driver.isRunning is too frequent
Key: BROOKLYN-176
URL: https://issues.apache.org/jira/browse/BROOKLYN-176
Project: Brooklyn
Issue Type: Improvement
Affects Versions: 0.9.0-SNAPSHOT
Reporter: Aled Sage
Many of our entities by default poll driver.isRunning, calling it every 5 seconds. This often involves a ssh execution, which is cpu intensive. This doesn't scale.
This polling should only be done if there is no other/better way to determine if an entity is unhealthy. We should use other mechanisms (e.g. checking if a web-server is reachable over http), and only resort to calling driver.isRunning to provide additional information if that other check fails.
However, turning it off is a little tricky in the current code. The SoftwareProcess.initEnrichers does:
{noformat}
ServiceNotUpLogic.updateNotUpIndicator(this, SERVICE_PROCESS_IS_RUNNING, "No information yet on whether this service is running");
{noformat}
The SERVICE_PROCESS_IS_RUNNING value is cleared by `connectServiceUpIsRunning`, which polls the driver.isRunning`. If you don't call `connectServiceUpIsRunning` then you'd need to do something yourself to ensure `SERVICE_PROCESS_IS_RUNNING` is cleared.
We also need to better define the best practices for checking serviceUp in a pure-YAML entity. We need better examples (and a simpler way) to hook up sensor feeds, such as http feeds etc, for polling an entity's health.
There are a few areas of related code:
* The attribute `service.notUp.indicators` allows multiple ways of determining if an entity is healthy. If any of these indicators have put an entry into ``service.notUp.indicators` map, then the entity is marked as serviceUp=false.
* The attribute `service.notUp.diagnostics` is populated with additional info when an entity fails. See `SoftwareProcessImpl.ServiceNotUpDiagnosticsCollector`, which is executed when serviceUp is set to false or when serviceState changes. The defaults are to check if the machine is ssh'able, and check driver.isRunning.
* The `HttpRequestSensor` is usable in YAML, via an `EntityInitializer`, to add an HTTP-based sensor feed.
* Config key `SoftwareProcess.RETRIEVE_USAGE_METRICS`, disables (some) polling for usage/performance metrics, but will still do health metrics such as service-up.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)