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
This commit is contained in:
armando-migliaccio 2014-08-22 08:21:09 -07:00 committed by Armando Migliaccio
parent 2b66a38d9a
commit ebcfed1ecd
2 changed files with 20 additions and 22 deletions

View File

@ -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
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
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
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
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."""

View File

@ -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)