From: Assaf Muller Date: Fri, 20 Feb 2015 01:34:17 +0000 (-0500) Subject: Fix reference to non-existent setup_dvr_flows_on_integ_tun_br X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=d313e668ba03a5438ce2c266bbb236303d5b3227;p=openstack-build%2Fneutron-build.git Fix reference to non-existent setup_dvr_flows_on_integ_tun_br Found via the pylint no-member check. Co-authored-by: Kevin Benton Closes-Bug: #1423775 Change-Id: Id4104fa783aa8c34917df6d16ff1290882f93af5 --- diff --git a/neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py b/neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py index e9de376db..80a7d92c8 100644 --- a/neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py +++ b/neutron/plugins/openvswitch/agent/ovs_dvr_neutron_agent.py @@ -135,6 +135,12 @@ class OVSDVRNeutronAgent(object): if self.enable_distributed_routing: self.get_dvr_mac_address() + def setup_dvr_flows(self): + self.setup_dvr_flows_on_integ_br() + self.setup_dvr_flows_on_tun_br() + self.setup_dvr_flows_on_phys_br() + self.setup_dvr_mac_flows_on_all_brs() + def reset_ovs_parameters(self, integ_br, tun_br, patch_int_ofport, patch_tun_ofport): '''Reset the openvswitch parameters''' diff --git a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py index d0f93cc2e..8ab2336ee 100644 --- a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py @@ -241,10 +241,7 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, if self.enable_tunneling: self.setup_tunnel_br() - self.dvr_agent.setup_dvr_flows_on_integ_br() - self.dvr_agent.setup_dvr_flows_on_tun_br() - self.dvr_agent.setup_dvr_flows_on_phys_br() - self.dvr_agent.setup_dvr_mac_flows_on_all_brs() + self.dvr_agent.setup_dvr_flows() # Collect additional bridges to monitor self.ancillary_brs = self.setup_ancillary_bridges(integ_br, tun_br) @@ -1442,13 +1439,13 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, self.reset_tunnel_br() self.setup_tunnel_br() tunnel_sync = True - if self.enable_distributed_routing: - self.dvr_agent.reset_ovs_parameters(self.int_br, - self.tun_br, - self.patch_int_ofport, - self.patch_tun_ofport) - self.dvr_agent.reset_dvr_parameters() - self.dvr_agent.setup_dvr_flows_on_integ_tun_br() + if self.enable_distributed_routing: + self.dvr_agent.reset_ovs_parameters(self.int_br, + self.tun_br, + self.patch_int_ofport, + self.patch_tun_ofport) + self.dvr_agent.reset_dvr_parameters() + self.dvr_agent.setup_dvr_flows() elif ovs_status == constants.OVS_DEAD: # Agent doesn't apply any operations when ovs is dead, to # prevent unexpected failure or crash. Sleep and continue diff --git a/neutron/tests/unit/openvswitch/test_ovs_dvr_neutron_agent.py b/neutron/tests/unit/openvswitch/test_ovs_dvr_neutron_agent.py index 56a7b38c6..b17f44df6 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_dvr_neutron_agent.py +++ b/neutron/tests/unit/openvswitch/test_ovs_dvr_neutron_agent.py @@ -801,3 +801,28 @@ class TestOvsDvrNeutronAgent(base.BaseTestCase): del_flows_tn_fn.assert_called_with(table=constants.DVR_NOT_LEARN, dl_src=newmac) self.assertFalse(add_flow_fn.called) + + def test_ovs_restart(self): + self._setup_for_dvr_test() + reset_methods = ( + 'reset_ovs_parameters', 'reset_dvr_parameters', + 'setup_dvr_flows_on_integ_br', 'setup_dvr_flows_on_tun_br', + 'setup_dvr_flows_on_phys_br', 'setup_dvr_mac_flows_on_all_brs') + reset_mocks = [mock.patch.object(self.agent.dvr_agent, method).start() + for method in reset_methods] + with contextlib.nested( + mock.patch.object(self.agent, 'check_ovs_status', + return_value=constants.OVS_RESTARTED), + mock.patch.object(self.agent, '_agent_has_updates', + side_effect=TypeError('loop exit')) + ): + # block RPC calls and bridge calls + self.agent.setup_physical_bridges = mock.Mock() + self.agent.setup_integration_br = mock.Mock() + self.agent.reset_tunnel_br = mock.Mock() + self.agent.state_rpc = mock.Mock() + try: + self.agent.rpc_loop(polling_manager=mock.Mock()) + except TypeError: + pass + self.assertTrue(all([x.called for x in reset_mocks]))