Merge "Filter the 'leader' member from cluster membership list"

This commit is contained in:
Jenkins 2016-01-22 19:57:54 +00:00 committed by Gerrit Code Review
commit 2ba33fa75e
3 changed files with 32 additions and 2 deletions

View File

@ -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):

View File

@ -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')

View File

@ -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.