Do state report after setting start_flag on OVS restart
This fixes race condition leading to lack of fdb entries on agent after OVS restart, if agent managed to handle all ports before sending state report with start_flag set to True. Change-Id: I943f8d805630cdfbefff9cff1fb4bce89210618b Closes-Bug: #1808136 (cherry picked from commit3995abefb1
) (cherry picked from commit329de01d09
)
This commit is contained in:
parent
ae032bf82f
commit
ffa3e75269
|
@ -2017,6 +2017,9 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin,
|
|||
self.setup_tunnel_br_flows()
|
||||
self.agent_state['start_flag'] = True
|
||||
tunnel_sync = True
|
||||
# Force state report to avoid race condition
|
||||
# with l2pop fdb entries update
|
||||
self._report_state()
|
||||
if self.enable_distributed_routing:
|
||||
self.dvr_agent.reset_ovs_parameters(self.int_br,
|
||||
self.tun_br,
|
||||
|
|
|
@ -1853,7 +1853,9 @@ class TestOvsNeutronAgent(object):
|
|||
'setup_tunnel_br_flows') as setup_tunnel_br_flows,\
|
||||
mock.patch.object(
|
||||
self.mod_agent.OVSNeutronAgent,
|
||||
'_reset_tunnel_ofports') as reset_tunnel_ofports:
|
||||
'_reset_tunnel_ofports') as reset_tunnel_ofports,\
|
||||
mock.patch.object(self.agent.state_rpc,
|
||||
'report_state') as report_st:
|
||||
log_exception.side_effect = Exception(
|
||||
'Fake exception to get out of the loop')
|
||||
devices_not_ready = set()
|
||||
|
@ -1901,7 +1903,9 @@ class TestOvsNeutronAgent(object):
|
|||
self.assertTrue(setup_tunnel_br_flows.called)
|
||||
self.assertTrue(setup_tunnel_br.called)
|
||||
if self.agent.enable_tunneling:
|
||||
self.assertTrue(self.agent.agent_state.get('start_flag'))
|
||||
self.agent.agent_state['start_flag'] = True
|
||||
report_st.assert_called_once_with(
|
||||
self.agent.context, self.agent.agent_state, True)
|
||||
|
||||
def test_ovs_status(self):
|
||||
self._test_ovs_status(constants.OVS_NORMAL,
|
||||
|
|
Loading…
Reference in New Issue