From 7d42ee769cdd4f4dc7b2ca1d85557bc471ce4b7e Mon Sep 17 00:00:00 2001 From: Sergey Belous Date: Thu, 3 Dec 2015 18:49:13 +0300 Subject: [PATCH] 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 --- neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py | 7 ++++++- .../unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py index e630c4a7f..06374b169 100644 --- a/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py +++ b/neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py @@ -77,6 +77,8 @@ class DhcpAgentNotifyAPI(object): def _get_enabled_agents(self, context, network, agents, method, payload): """Get the list of agents who can provide services.""" + if not agents: + return [] network_id = network['id'] enabled_agents = agents 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'])) if schedule_required: 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( context, network, agents, method, payload) for agent in enabled_agents: diff --git a/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py index 2704ba1c8..cd2ab2aee 100644 --- a/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py +++ b/neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py @@ -83,6 +83,8 @@ class TestDhcpAgentNotifyAPI(base.BaseTestCase): self.notifier.plugin.get_ports_count.return_value = port_count enabled_agents = self.notifier._get_enabled_agents( 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(expected_warnings, self.mock_log.warn.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): 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) def test__get_enabled_agents_with_admin_state_down(self): -- 2.45.2