Browse Source

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 commit 3995abefb1)
changes/02/626102/2
Oleg Bondarev 4 years ago
parent
commit
6a56d38798
  1. 3
      neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py
  2. 8
      neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py

3
neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py

@ -2034,6 +2034,9 @@ class OVSNeutronAgent(l2population_rpc.L2populationRpcCallBackTunnelMixin,
self.setup_tunnel_br()
self.setup_tunnel_br_flows()
self.agent_state['start_flag'] = 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,

8
neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py

@ -2054,7 +2054,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()
@ -2102,7 +2104,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…
Cancel
Save