How to count relations?

Cory Johns cory.johns at canonical.com
Wed Jun 7 15:44:05 UTC 2017


Alex beat me to it, but here's a marginally more complete example:
https://gist.github.com/johnsca/a91cb5897d92dfb6741ee1a09d82b39b

The key points are:

* The interface needs to be UNIT scoped (because you care about individual
units)
* The joined handler sets a state for each unit that joins
* The @when('rel.connected') predicate in the charm layer matches all units
that have had that state set, so the set of conversations in the interface
layer includes those units, and only those units.  This is trivially all of
the units in my example, but you could also set a different state in a
-changed handler based on data sent by each remote unit, and the
conversations would only include the units that had that specific state set
when you matched that state using @when

Alex: A conversation will always have a scope, so that list comprehension
isn't necessary.

On Wed, Jun 7, 2017 at 11:38 AM, Alex Kavanagh <alex.kavanagh at canonical.com>
wrote:

> Hi
>
> I'm assuming you are using charms.reactive; if not then look into
> relation_ids command.
>
> In your interface, count the number of conversations that have a scope set
> to something other than None.  scope shouldn't be None, but I've had cases
> where it has been (it may have been a bug):
>
> So in the provider.py RelationBase derived class, something along the
> lines of:
>
> num = len([c for c in self.conversations() if c.scope])
>
> in a method would be a relatively simple way of doing it.
>
> (There may be better ways of doing this!)
>
> Cheers
> Alex.
>
> On Wed, Jun 7, 2017 at 4:22 PM, fengxia <fxia1 at lenovo.com> wrote:
>
>> Hi Juju,
>>
>> I'm building two charms and linking them with one relation, one charm
>> ("A") will provide and the other ("B") will require.
>>
>> The deployment will have one "A" and three "B"s. How do I know all three
>> Bs have joined? I'm thinking to use a counter in A's relation, then at
>> relation-joined hook by B to add this counter. But set_remote() and
>> set_local() didn't work. Not sure what's the right way to achieve this?
>>
>>
>> --
>> Feng xia
>> Engineer
>> Lenovo USA
>>
>> Phone: 5088011794
>> fxia1 at lenovo.com
>>
>> Lenovo.com
>> Twitter | Facebook | Instagram | Blogs | Forums
>> 9
>>
>>
>> --
>> Juju mailing list
>> Juju at lists.ubuntu.com
>> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailm
>> an/listinfo/juju
>>
>
>
>
> --
> Alex Kavanagh - Software Engineer
> Cloud Dev Ops - Solutions & Product Engineering - Canonical Ltd
>
> --
> Juju mailing list
> Juju at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/
> mailman/listinfo/juju
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/juju/attachments/20170607/22800098/attachment.html>


More information about the Juju mailing list