From: Ramu Ramamurthy Date: Thu, 19 Nov 2015 23:43:19 +0000 (-0500) Subject: In port_dead, handle case when port already deleted X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=76cc53c611a639d915761d1fa3c879cda2ba3502;p=openstack-build%2Fneutron-build.git In port_dead, handle case when port already deleted db_get_val can return None if the port got deleted concurrently. In this case there is no need to mark it dead and add drop flow for it. Change-Id: I5ef9665770df3a9bbaf79049b219fadd73e20309 Partial-Bug: #1493414 --- diff --git a/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py index ea51b95af..dd7791f0b 100644 --- a/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py @@ -952,7 +952,7 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin, # Don't kill a port if it's already dead cur_tag = self.int_br.db_get_val("Port", port.port_name, "tag", log_errors=log_errors) - if cur_tag != DEAD_VLAN_TAG: + if cur_tag and cur_tag != DEAD_VLAN_TAG: self.int_br.set_db_attribute("Port", port.port_name, "tag", DEAD_VLAN_TAG, log_errors=log_errors) self.int_br.drop_port(in_port=port.ofport) diff --git a/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py b/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py index 71b5637f8..fd6d9762c 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py +++ b/neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py @@ -312,7 +312,7 @@ class TestOvsNeutronAgent(object): with mock.patch.object(self.agent, 'int_br') as int_br: int_br.db_get_val.return_value = cur_tag self.agent.port_dead(port) - if cur_tag == self.mod_agent.DEAD_VLAN_TAG: + if cur_tag is None or cur_tag == self.mod_agent.DEAD_VLAN_TAG: self.assertFalse(int_br.set_db_attribute.called) self.assertFalse(int_br.drop_port.called) else: @@ -329,6 +329,9 @@ class TestOvsNeutronAgent(object): def test_port_dead_with_port_already_dead(self): self._test_port_dead(self.mod_agent.DEAD_VLAN_TAG) + def test_port_dead_with_valid_tag(self): + self._test_port_dead(cur_tag=1) + def mock_scan_ports(self, vif_port_set=None, registered_ports=None, updated_ports=None, port_tags_dict=None, sync=False): if port_tags_dict is None: # Because empty dicts evaluate as False.