]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Ensure router exists when auto_schedule_routers
authorZhiQiang Fan <aji.zqfan@gmail.com>
Wed, 18 Sep 2013 17:53:44 +0000 (01:53 +0800)
committerZhiQiang Fan <aji.zqfan@gmail.com>
Thu, 26 Sep 2013 14:48:46 +0000 (22:48 +0800)
Currently, the auto_schedule_routers() accepts parameter router_ids,
which may contain invalid router ids, since we've already filtered
them via plugin.get_routers(), we can directly use that safe object.

Closes-Bug: #1217998
Closes-Bug: #1210877

Change-Id: I6196f16cca65fee4e848173d0a0a10fde967195d

neutron/scheduler/l3_agent_scheduler.py
neutron/tests/unit/openvswitch/test_agent_scheduler.py

index e98b92894a1a08fc131d3f6c2680e909375f0260..69af861b75343980ee3206c3b3a0b52ed6f27057 100644 (file)
@@ -98,7 +98,7 @@ class ChanceScheduler(object):
                 candidates = plugin.get_l3_agent_candidates(router, [l3_agent])
                 if not candidates:
                     to_removed_ids.append(router['id'])
-            router_ids = set(unscheduled_router_ids) - set(to_removed_ids)
+            router_ids = set([r['id'] for r in routers]) - set(to_removed_ids)
             if not router_ids:
                 LOG.warn(_('No routers compatible with L3 agent configuration'
                            ' on host %s'), host)
index 560efc605edebadafe2d216001e97c68ce8db718..6895d3ccc8ee63eba07f60e09a31073332e46d93 100644 (file)
@@ -576,6 +576,19 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase):
         self.assertEqual(1, num_before_remove)
         self.assertEqual(0, num_after_remove)
 
+    def test_router_auto_schedule_with_invalid_router(self):
+        with self.router() as router:
+            l3_rpc = l3_rpc_base.L3RpcCallbackMixin()
+            self._register_agent_states()
+        # deleted router
+        ret_a = l3_rpc.sync_routers(self.adminContext, host=L3_HOSTA,
+                                    router_ids=[router['router']['id']])
+        self.assertFalse(ret_a)
+        # non-existent router
+        ret_a = l3_rpc.sync_routers(self.adminContext, host=L3_HOSTA,
+                                    router_ids=[uuidutils.generate_uuid()])
+        self.assertFalse(ret_a)
+
     def test_router_auto_schedule_with_hosted(self):
         with self.router() as router:
             l3_rpc = l3_rpc_base.L3RpcCallbackMixin()