~niedbalski/charms/trusty/rabbitmq-server/fix-lp-1489053

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/contrib/peerstorage/__init__.py

  • Committer: billy.olsen at canonical
  • Date: 2015-09-01 00:54:12 UTC
  • mfrom: (105.3.6 rabbitmq-server)
  • Revision ID: billy.olsen@canonical.com-20150901005412-v4oorjgs1kyopdvx
[thedac,r=billy-olsen] Fix clustering race conditions.

For juju >= 1.24 run cluster_changed() when the leader-settings-changed hook executes.
For juju < 1.24 use remote_unit() in relation_get when in a native cluster relation hook

Partially-Closes Bug: 1486177

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
    leader_get as _leader_get,
28
28
    leader_set,
29
29
    is_leader,
 
30
    remote_unit,
 
31
    relation_type,
30
32
)
31
33
 
32
34
 
162
164
def peer_retrieve(key, relation_name='cluster'):
163
165
    """Retrieve a named key from peer relation `relation_name`."""
164
166
    cluster_rels = relation_ids(relation_name)
 
167
    # Remote unit if we are in a native cluster relation hook
 
168
    if relation_type() == 'cluster':
 
169
        unit = remote_unit()
 
170
    # Local unit if we are in a non-cluster relation hook
 
171
    # The remote unit is not a part of the cluster relation
 
172
    else:
 
173
        unit = local_unit()
165
174
    if len(cluster_rels) > 0:
166
175
        cluster_rid = cluster_rels[0]
167
176
        return relation_get(attribute=key, rid=cluster_rid,
168
 
                            unit=local_unit())
 
177
                            unit=unit)
169
178
    else:
170
179
        raise ValueError('Unable to detect'
171
180
                         'peer relation {}'.format(relation_name))