Check compatibility when auto schedule ha routers
When l3 agents do fullsync, the server configured router_auto_schedule will schedule ha routers whose l3 agent count don't reach max_l3_agents_per_router to the agent. Need to check compatibility before binding. Change-Id: Ie9869eae2bd01c19da5820b4e7ecb7cba7b5692a Closes-Bug: 1598422
This commit is contained in:
parent
3f41375778
commit
9f30df85fe
neutron
@ -307,17 +307,19 @@ class L3Scheduler(object):
|
|||||||
agent)
|
agent)
|
||||||
scheduled = False
|
scheduled = False
|
||||||
admin_ctx = context.elevated()
|
admin_ctx = context.elevated()
|
||||||
for router, agents in routers_agents:
|
underscheduled_routers = [router for router, agents in routers_agents
|
||||||
max_agents_not_reached = (
|
if (not self.max_ha_agents or
|
||||||
not self.max_ha_agents or agents < self.max_ha_agents)
|
agents < self.max_ha_agents)]
|
||||||
if max_agents_not_reached:
|
schedulable_routers = self._get_routers_can_schedule(
|
||||||
if not self._router_has_binding(admin_ctx, router['id'],
|
admin_ctx, plugin, underscheduled_routers, agent)
|
||||||
agent.id):
|
for router in schedulable_routers:
|
||||||
self.create_ha_port_and_bind(plugin, admin_ctx,
|
if not self._router_has_binding(admin_ctx, router['id'],
|
||||||
router['id'],
|
agent.id):
|
||||||
router['tenant_id'],
|
self.create_ha_port_and_bind(plugin, admin_ctx,
|
||||||
agent)
|
router['id'],
|
||||||
scheduled = True
|
router['tenant_id'],
|
||||||
|
agent)
|
||||||
|
scheduled = True
|
||||||
|
|
||||||
return scheduled
|
return scheduled
|
||||||
|
|
||||||
|
@ -1675,6 +1675,34 @@ class L3HAChanceSchedulerTestCase(L3HATestCaseMixin):
|
|||||||
def test_auto_schedule_all_routers_when_agent_added(self):
|
def test_auto_schedule_all_routers_when_agent_added(self):
|
||||||
self._auto_schedule_when_agent_added(False)
|
self._auto_schedule_when_agent_added(False)
|
||||||
|
|
||||||
|
def test_auto_schedule_ha_router_when_incompatible_agent_exist(self):
|
||||||
|
handle_internal_only_routers_agent = helpers.register_l3_agent(
|
||||||
|
'host_3', n_const.L3_AGENT_MODE_LEGACY, internal_only=False)
|
||||||
|
router = self._create_ha_router()
|
||||||
|
|
||||||
|
self.plugin.auto_schedule_routers(
|
||||||
|
self.adminContext, handle_internal_only_routers_agent.host, [])
|
||||||
|
agents = self.plugin.get_l3_agents_hosting_routers(
|
||||||
|
self.adminContext, [router['id']],
|
||||||
|
admin_state_up=True)
|
||||||
|
agent_ids = [agent['id'] for agent in agents]
|
||||||
|
self.assertEqual(2, len(agents))
|
||||||
|
self.assertNotIn(handle_internal_only_routers_agent.id, agent_ids)
|
||||||
|
|
||||||
|
def test_auto_schedule_ha_router_when_dvr_agent_exist(self):
|
||||||
|
dvr_agent = helpers.register_l3_agent(
|
||||||
|
HOST_DVR, n_const.L3_AGENT_MODE_DVR)
|
||||||
|
router = self._create_ha_router()
|
||||||
|
|
||||||
|
self.plugin.auto_schedule_routers(self.adminContext, dvr_agent.host,
|
||||||
|
[])
|
||||||
|
agents = self.plugin.get_l3_agents_hosting_routers(
|
||||||
|
self.adminContext, [router['id']],
|
||||||
|
admin_state_up=True)
|
||||||
|
agent_ids = [agent['id'] for agent in agents]
|
||||||
|
self.assertEqual(2, len(agents))
|
||||||
|
self.assertNotIn(dvr_agent.id, agent_ids)
|
||||||
|
|
||||||
def _auto_schedule_when_agent_added(self, specific_router):
|
def _auto_schedule_when_agent_added(self, specific_router):
|
||||||
router = self._create_ha_router()
|
router = self._create_ha_router()
|
||||||
agents = self.plugin.get_l3_agents_hosting_routers(
|
agents = self.plugin.get_l3_agents_hosting_routers(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user