Solve unexpected NoneType returned by _get_routers_can_schedule.

Solve a problem with an unexpected NoneType returned by
_get_routers_can_schedule called from within
_schedule_ha_routers_to_additional_agent when using:

router_scheduler_driver =
    neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler

This was leading to problems with starting neutron-l3-agent on network
nodes, causing HA routers to fail to start.

Closes-Bug: #1641879
Change-Id: I33c5a6214670f0ada9c2293b0eb2ff243f6f7b1b
(cherry picked from commit 62176a9b40)
This commit is contained in:
Pepijn Oomen 2016-11-21 12:07:45 +01:00 committed by Ihar Hrachyshka
parent 8a89cce6fc
commit bc91bcef84
2 changed files with 7 additions and 2 deletions

View File

@ -448,7 +448,7 @@ class AZLeastRoutersScheduler(LeastRoutersScheduler):
target_routers.append(r)
if not target_routers:
return
return []
return super(AZLeastRoutersScheduler, self)._get_routers_can_schedule(
context, plugin, target_routers, l3_agent)

View File

@ -173,7 +173,7 @@ class L3SchedulerBaseTestCase(base.BaseTestCase):
self.scheduler,
'_get_routers_can_schedule') as mock_target_routers:
mock_unscheduled_routers.return_value = mock.ANY
mock_target_routers.return_value = None
mock_target_routers.return_value = []
result = self.scheduler.auto_schedule_routers(
self.plugin, mock.ANY, mock.ANY, mock.ANY)
self.assertTrue(self.plugin.get_enabled_agent_on_host.called)
@ -2128,6 +2128,11 @@ class L3AgentAZLeastRoutersSchedulerTestCase(L3HATestCaseMixin):
hosts = set([a['host'] for a in agents])
self.assertEqual(expected_hosts, hosts)
def test__get_routers_can_schedule_with_no_target_routers(self):
result = self.plugin.router_scheduler._get_routers_can_schedule(
self.plugin, mock.ANY, [], mock.ANY)
self.assertEqual([], result)
class L3DVRHAPlugin(db_v2.NeutronDbPluginV2,
l3_hamode_db.L3_HA_NAT_db_mixin,