Change to improve dhcp-agent sync_state

Added a pool.waitall to dhcp-agent sync_state
to ensure that the last pool of threads are complete
before another sync_state begins.  Added another
log message to aid in debugging. Also added the
test_sync_state_waitall unit test.

Change-Id: I13d79a212672c4086e3082783743cb1ef2b48cfb
Closes-Bug: #1257514
(cherry picked from commit 9f6ff7e312)
This commit is contained in:
Ed Bak 2013-12-03 23:00:23 +00:00 committed by Assaf Muller
parent d1a9a9dff9
commit 3c5a11c900
2 changed files with 18 additions and 0 deletions

View File

@ -158,6 +158,8 @@ class DhcpAgent(manager.Manager):
for network in active_networks:
pool.spawn_n(self.safe_configure_dhcp_for_network, network)
pool.waitall()
LOG.info(_('Synchronizing state complete'))
except Exception:
self.needs_resync = True

View File

@ -279,6 +279,22 @@ class TestDhcpAgent(base.BaseTestCase):
def test_sync_state_disabled_net(self):
self._test_sync_state_helper(['b'], ['a'])
def test_sync_state_waitall(self):
class mockNetwork():
id = '0'
admin_state_up = True
subnets = []
def __init__(self, id):
self.id = id
with mock.patch.object(dhcp_agent.eventlet.GreenPool, 'waitall') as w:
active_networks = [mockNetwork('1'), mockNetwork('2'),
mockNetwork('3'), mockNetwork('4'),
mockNetwork('5')]
known_networks = ['1', '2', '3', '4', '5']
self._test_sync_state_helper(known_networks, active_networks)
w.assert_called_once_with()
def test_sync_state_plugin_error(self):
with mock.patch(DHCP_PLUGIN) as plug:
mock_plugin = mock.Mock()