diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py index 2b5adcad3c1..54d383022f7 100644 --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py @@ -297,7 +297,14 @@ class OVNClient(object): # NOTE(ralonsoh): OVN subports don't have host ID information. return + port_up = self._nb_idl.lsp_get_up(db_port.id).execute( + check_error=True) if up: + if not port_up: + LOG.warning('Logical_Switch_Port %s host information not ' + 'updated, the port state is down') + return + if not db_port.port_bindings: return @@ -319,6 +326,11 @@ class OVNClient(object): self._nb_idl.db_set( 'Logical_Switch_Port', db_port.id, ext_ids)) else: + if port_up: + LOG.warning('Logical_Switch_Port %s host information not ' + 'removed, the port state is up') + return + cmd.append( self._nb_idl.db_remove( 'Logical_Switch_Port', db_port.id, 'external_ids', diff --git a/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_client.py b/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_client.py index b536d869d89..5c836d60938 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_client.py +++ b/neutron/tests/unit/plugins/ml2/drivers/ovn/mech_driver/ovsdb/test_ovn_client.py @@ -245,6 +245,7 @@ class TestOVNClient(TestOVNClientBase): context = mock.MagicMock() port_id = 'fake-port-id' db_port = mock.Mock(id=port_id) + self.nb_idl.lsp_get_up.return_value.execute.return_value = False self.ovn_client.update_lsp_host_info(context, db_port, up=False)