From: armando-migliaccio Date: Fri, 22 Aug 2014 15:21:09 +0000 (-0700) Subject: Fix InvalidRequestError in auto_schedule_routers X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=fa0abeb043c2f66c537e43a8ea7181f648c71d33;p=openstack-build%2Fneutron-build.git Fix InvalidRequestError in auto_schedule_routers This was discussed in review [1], and was deferred until the time was ripe for the appropriate fix. As suggested and reported, auto_schedule_routers is too affected by this error. This patch takes care of the issue, in a similar way. [1] - https://review.openstack.org/#/c/112740/ Related-bug: #1354072 Closes-bug: #1360104 Change-Id: Ie3cb0c31dfa571c694cd38e19f72ff8503815635 --- diff --git a/neutron/scheduler/l3_agent_scheduler.py b/neutron/scheduler/l3_agent_scheduler.py index c07faba7d..5e3823fb5 100644 --- a/neutron/scheduler/l3_agent_scheduler.py +++ b/neutron/scheduler/l3_agent_scheduler.py @@ -116,26 +116,25 @@ class L3Scheduler(object): :returns: True if routers have been successfully assigned to host """ - with context.session.begin(subtransactions=True): - l3_agent = plugin.get_enabled_agent_on_host( - context, constants.AGENT_TYPE_L3, host) - if not l3_agent: - return False - - unscheduled_routers = self.get_routers_to_schedule( - context, plugin, router_ids) - if not unscheduled_routers: - return False - - target_routers = self.get_routers_can_schedule( - context, plugin, unscheduled_routers, l3_agent) - if not target_routers: - LOG.warn(_('No routers compatible with L3 agent configuration' - ' on host %s'), host) - return False - - self.bind_routers(context, target_routers, l3_agent) - return True + l3_agent = plugin.get_enabled_agent_on_host( + context, constants.AGENT_TYPE_L3, host) + if not l3_agent: + return False + + unscheduled_routers = self.get_routers_to_schedule( + context, plugin, router_ids) + if not unscheduled_routers: + return False + + target_routers = self.get_routers_can_schedule( + context, plugin, unscheduled_routers, l3_agent) + if not target_routers: + LOG.warn(_('No routers compatible with L3 agent configuration' + ' on host %s'), host) + return False + + self.bind_routers(context, target_routers, l3_agent) + return True def get_candidates(self, plugin, context, sync_router, subnet_id): """Return L3 agents where a router could be scheduled.""" diff --git a/neutron/tests/unit/test_l3_schedulers.py b/neutron/tests/unit/test_l3_schedulers.py index 86d7c0d0a..5aa75562f 100644 --- a/neutron/tests/unit/test_l3_schedulers.py +++ b/neutron/tests/unit/test_l3_schedulers.py @@ -100,7 +100,6 @@ class L3SchedulerBaseTestCase(base.BaseTestCase): super(L3SchedulerBaseTestCase, self).setUp() self.scheduler = FakeL3Scheduler() self.plugin = mock.Mock() - self.context = q_context.get_admin_context() def test_auto_schedule_routers(self): self.plugin.get_enabled_agent_on_host.return_value = [mock.ANY] @@ -109,7 +108,7 @@ class L3SchedulerBaseTestCase(base.BaseTestCase): mock.patch.object(self.scheduler, 'get_routers_can_schedule')) as ( gs, gr): result = self.scheduler.auto_schedule_routers( - self.plugin, self.context, mock.ANY, mock.ANY) + self.plugin, mock.ANY, mock.ANY, mock.ANY) self.assertTrue(self.plugin.get_enabled_agent_on_host.called) self.assertTrue(result) self.assertTrue(gs.called) @@ -118,7 +117,7 @@ class L3SchedulerBaseTestCase(base.BaseTestCase): def test_auto_schedule_routers_no_agents(self): self.plugin.get_enabled_agent_on_host.return_value = None result = self.scheduler.auto_schedule_routers( - self.plugin, self.context, mock.ANY, mock.ANY) + self.plugin, mock.ANY, mock.ANY, mock.ANY) self.assertTrue(self.plugin.get_enabled_agent_on_host.called) self.assertFalse(result) @@ -127,7 +126,7 @@ class L3SchedulerBaseTestCase(base.BaseTestCase): 'get_routers_to_schedule') as mock_routers: mock_routers.return_value = None result = self.scheduler.auto_schedule_routers( - self.plugin, self.context, mock.ANY, mock.ANY) + self.plugin, mock.ANY, mock.ANY, mock.ANY) self.assertTrue(self.plugin.get_enabled_agent_on_host.called) self.assertFalse(result) @@ -140,7 +139,7 @@ class L3SchedulerBaseTestCase(base.BaseTestCase): mock_unscheduled_routers.return_value = mock.ANY mock_target_routers.return_value = None result = self.scheduler.auto_schedule_routers( - self.plugin, self.context, mock.ANY, mock.ANY) + self.plugin, mock.ANY, mock.ANY, mock.ANY) self.assertTrue(self.plugin.get_enabled_agent_on_host.called) self.assertFalse(result)