Merge "Filter the 'leader' member from cluster membership list"
This commit is contained in:
commit
2ba33fa75e
|
@ -103,7 +103,7 @@ class RugCoordinator(object):
|
|||
self._coordinator.watch_join_group(self.group, self.cluster_changed)
|
||||
self._coordinator.watch_leave_group(self.group, self.cluster_changed)
|
||||
self._coordinator.heartbeat()
|
||||
LOG.debug("Sending initial event changed for members; %s" %
|
||||
LOG.debug("Sending initial event changed for members: %s" %
|
||||
self.members)
|
||||
self.cluster_changed(event=None, node_bootstrap=True)
|
||||
|
||||
|
@ -139,7 +139,16 @@ class RugCoordinator(object):
|
|||
@property
|
||||
def members(self):
|
||||
"""Returns the current cluster membership list"""
|
||||
return self._coordinator.get_members(self.group).get()
|
||||
members = self._coordinator.get_members(self.group).get()
|
||||
|
||||
# tooz ZK driver reports 'leader' as a member, which can screw with
|
||||
# hashing.
|
||||
try:
|
||||
members.remove('leader')
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
return members
|
||||
|
||||
@property
|
||||
def is_leader(self):
|
||||
|
|
|
@ -107,6 +107,24 @@ class TestRugCoordinator(base.RugTestBase):
|
|||
self.assertEqual(self.coordinator.members, ['foo', 'bar'])
|
||||
self.fake_coord.get_members.assert_called_with(self.coordinator.group)
|
||||
|
||||
def test_members_filter_leader(self):
|
||||
fake_async_resp = mock.MagicMock(
|
||||
get=mock.MagicMock(return_value=['foo', 'bar', 'leader'])
|
||||
)
|
||||
self.fake_coord.get_members.return_value = fake_async_resp
|
||||
self.coordinator = coordination.RugCoordinator(self.queue)
|
||||
self.assertEqual(self.coordinator.members, ['foo', 'bar'])
|
||||
self.fake_coord.get_members.assert_called_with(self.coordinator.group)
|
||||
|
||||
def test_members_filter_no_leader(self):
|
||||
fake_async_resp = mock.MagicMock(
|
||||
get=mock.MagicMock(return_value=['foo', 'bar'])
|
||||
)
|
||||
self.fake_coord.get_members.return_value = fake_async_resp
|
||||
self.coordinator = coordination.RugCoordinator(self.queue)
|
||||
self.assertEqual(self.coordinator.members, ['foo', 'bar'])
|
||||
self.fake_coord.get_members.assert_called_with(self.coordinator.group)
|
||||
|
||||
def test_is_leader(self):
|
||||
fake_async_resp = mock.MagicMock(
|
||||
get=mock.MagicMock(return_value='foo_host')
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
fixes:
|
||||
- Bug `1535857 <https://bugs.launchpad.net/astara/+bug/1535857/>`_ The additional \"leadership\" member reported by zookeeper is now ignored to avoid hashing resources to a non-existent node.
|
Loading…
Reference in New Issue