Join tables in query for down L3 agents
Join the agent table together with the L3 agent scheduler table. This fixes an issue where the query would return all admin_state_up L3 agents with router bindings when any agent in the database was dead (missed heartbeats) instead of just returning the dead L3 agents with bindings. Closes-Bug: #1359460 Change-Id: I29215f81be7e3513155faaad015e24dbf1a1ad5d
This commit is contained in:
parent
095b442c1a
commit
0cb15b5ceb
@ -110,6 +110,7 @@ class L3AgentSchedulerDbMixin(l3agentscheduler.L3AgentSchedulerPluginBase,
|
|||||||
seconds=agent_dead_limit)
|
seconds=agent_dead_limit)
|
||||||
down_bindings = (
|
down_bindings = (
|
||||||
context.session.query(RouterL3AgentBinding).
|
context.session.query(RouterL3AgentBinding).
|
||||||
|
join(agents_db.Agent).
|
||||||
filter(agents_db.Agent.heartbeat_timestamp < cutoff,
|
filter(agents_db.Agent.heartbeat_timestamp < cutoff,
|
||||||
agents_db.Agent.admin_state_up))
|
agents_db.Agent.admin_state_up))
|
||||||
for binding in down_bindings:
|
for binding in down_bindings:
|
||||||
|
@ -643,6 +643,19 @@ class OvsAgentSchedulerTestCase(OvsAgentSchedulerTestCaseBase):
|
|||||||
agt_db.admin_state_up = state
|
agt_db.admin_state_up = state
|
||||||
self.adminContext.session.commit()
|
self.adminContext.session.commit()
|
||||||
|
|
||||||
|
def test_router_is_not_rescheduled_from_alive_agent(self):
|
||||||
|
with self.router():
|
||||||
|
l3_rpc = l3_rpc_base.L3RpcCallbackMixin()
|
||||||
|
self._register_agent_states()
|
||||||
|
|
||||||
|
# schedule the router to host A
|
||||||
|
l3_rpc.sync_routers(self.adminContext, host=L3_HOSTA)
|
||||||
|
with mock.patch('neutron.db.l3_agentschedulers_db.'
|
||||||
|
'L3AgentSchedulerDbMixin.reschedule_router') as rr:
|
||||||
|
# take down some unrelated agent and run reschedule check
|
||||||
|
self._take_down_agent_and_run_reschedule(DHCP_HOSTC)
|
||||||
|
self.assertFalse(rr.called)
|
||||||
|
|
||||||
def test_router_reschedule_from_dead_agent(self):
|
def test_router_reschedule_from_dead_agent(self):
|
||||||
with self.router():
|
with self.router():
|
||||||
l3_rpc = l3_rpc_base.L3RpcCallbackMixin()
|
l3_rpc = l3_rpc_base.L3RpcCallbackMixin()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user