Hi all,
TL;DR: I'd like to change the defaults for an app so that it is "down"
and "on-fire" if any of its children are failed.
_*Current Situation*_
Currently in Brooklyn, it is surprising what values are set for an app's
"service.isUp" and its "service.state" sensors:
* If any of the app's children are "isUp=true" (or if it has no
children), then the app sets itself as "isUp=true".
* If any of the children report "state=on_fire", then the app sets
itself as "state=on_fire".
Note the inconsistency: if one of two children are healthy, then the app
is "isUp=true && state=on_fire".
This behaviour of "quorum" for children/members is controlled by an
enricher, which can be easily configured in Java but not in YAML.
_*Proposal*_
We should change the default quorum behaviour for apps, to require all
of the app's children to be up. I'd argue that is the most common reason
that it has those children.
We should make this more easily configurable through config keys on the
app, so one can easily change the defaults. For example, to get the old
behaviour:
services:
- type: org.apache.brooklyn.entity.stock.BasicApplication
brooklyn.config:
quorum.up: atLeastOneUnlessEmpty
quorum.running: all
brooklyn.children:
...
Would this change negatively affect any existing apps? Are there more
use-cases where the default of "atLeastOneUnlessEmpty" is more sensible
than "all"?
See https://github.com/apache/brooklyn-server/pull/407 for an
implementation of this.
Aled