Add check that list of agents is not empty in _get_enabled_agents
No reason to try get enabled_agents and send notification if there are no any agents associated with network. Closes-bug: #1522471 Change-Id: I111967415ce600253fc679837d03c9cd75f19656
This commit is contained in:
parent
ab8adcf693
commit
7d42ee769c
|
@ -77,6 +77,8 @@ class DhcpAgentNotifyAPI(object):
|
||||||
|
|
||||||
def _get_enabled_agents(self, context, network, agents, method, payload):
|
def _get_enabled_agents(self, context, network, agents, method, payload):
|
||||||
"""Get the list of agents who can provide services."""
|
"""Get the list of agents who can provide services."""
|
||||||
|
if not agents:
|
||||||
|
return []
|
||||||
network_id = network['id']
|
network_id = network['id']
|
||||||
enabled_agents = agents
|
enabled_agents = agents
|
||||||
if not cfg.CONF.enable_services_on_agents_with_admin_state_down:
|
if not cfg.CONF.enable_services_on_agents_with_admin_state_down:
|
||||||
|
@ -134,7 +136,10 @@ class DhcpAgentNotifyAPI(object):
|
||||||
not self._is_reserved_dhcp_port(payload['port']))
|
not self._is_reserved_dhcp_port(payload['port']))
|
||||||
if schedule_required:
|
if schedule_required:
|
||||||
agents = self._schedule_network(admin_ctx, network, agents)
|
agents = self._schedule_network(admin_ctx, network, agents)
|
||||||
|
if not agents:
|
||||||
|
LOG.debug("Network %s is not hosted by any dhcp agent",
|
||||||
|
network_id)
|
||||||
|
return
|
||||||
enabled_agents = self._get_enabled_agents(
|
enabled_agents = self._get_enabled_agents(
|
||||||
context, network, agents, method, payload)
|
context, network, agents, method, payload)
|
||||||
for agent in enabled_agents:
|
for agent in enabled_agents:
|
||||||
|
|
|
@ -83,6 +83,8 @@ class TestDhcpAgentNotifyAPI(base.BaseTestCase):
|
||||||
self.notifier.plugin.get_ports_count.return_value = port_count
|
self.notifier.plugin.get_ports_count.return_value = port_count
|
||||||
enabled_agents = self.notifier._get_enabled_agents(
|
enabled_agents = self.notifier._get_enabled_agents(
|
||||||
mock.ANY, network, agents, mock.ANY, mock.ANY)
|
mock.ANY, network, agents, mock.ANY, mock.ANY)
|
||||||
|
if not cfg.CONF.enable_services_on_agents_with_admin_state_down:
|
||||||
|
agents = [x for x in agents if x.admin_state_up]
|
||||||
self.assertEqual(agents, enabled_agents)
|
self.assertEqual(agents, enabled_agents)
|
||||||
self.assertEqual(expected_warnings, self.mock_log.warn.call_count)
|
self.assertEqual(expected_warnings, self.mock_log.warn.call_count)
|
||||||
self.assertEqual(expected_errors, self.mock_log.error.call_count)
|
self.assertEqual(expected_errors, self.mock_log.error.call_count)
|
||||||
|
@ -112,7 +114,10 @@ class TestDhcpAgentNotifyAPI(base.BaseTestCase):
|
||||||
|
|
||||||
def test__get_enabled_agents_with_notification_required(self):
|
def test__get_enabled_agents_with_notification_required(self):
|
||||||
network = {'id': 'foo_network_id', 'subnets': ['foo_subnet_id']}
|
network = {'id': 'foo_network_id', 'subnets': ['foo_subnet_id']}
|
||||||
self._test__get_enabled_agents(network, [], port_count=20,
|
agent = agents_db.Agent()
|
||||||
|
agent.admin_state_up = False
|
||||||
|
agent.heartbeat_timestamp = timeutils.utcnow()
|
||||||
|
self._test__get_enabled_agents(network, [agent], port_count=20,
|
||||||
expected_warnings=0, expected_errors=1)
|
expected_warnings=0, expected_errors=1)
|
||||||
|
|
||||||
def test__get_enabled_agents_with_admin_state_down(self):
|
def test__get_enabled_agents_with_admin_state_down(self):
|
||||||
|
|
Loading…
Reference in New Issue