]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add check that list of agents is not empty in _get_enabled_agents
authorSergey Belous <sbelous@mirantis.com>
Thu, 3 Dec 2015 15:49:13 +0000 (18:49 +0300)
committerSergey Belous <sbelous@mirantis.com>
Wed, 16 Dec 2015 14:56:31 +0000 (17:56 +0300)
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
neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py

index e630c4a7f7484ed36b52ae5c15925a7f2bf5eb0f..06374b16949c8654d11a659a2762f4969ebe8896 100644 (file)
@@ -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:
index 2704ba1c842eb3ecd22ee5e343cd07532249726d..cd2ab2aee5580f8a6bf2af89039ccd090a4906be 100644 (file)
@@ -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):