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 <al...@gmail.com> on 2016/11/04 21:00:57 UTC

[PROPOSAL] Change app default to require all children to be up

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


Re: [PROPOSAL] Change app default to require all children to be up

Posted by Svetoslav Neykov <sv...@cloudsoftcorp.com>.
Makes sense. 
Customising the behaviour form YAML should be possible even now by declaring an enricher with the same ID.

Svet.


> On 4.11.2016 г., at 23:00, Aled Sage <al...@gmail.com> wrote:
> 
> 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
>