def _vm_port_deleted(self, ovs_port):
        ovs_port_id = ovs_port.get_id()
        lport_id = ovs_port.get_iface_id()
        lport = self.db_store.get_port(lport_id)
        if lport is None:
            lport = self.ovs_to_lport_mapping.get(ovs_port_id)
            if lport is None:
                return
            topic = lport.get('topic')
            del self.ovs_to_lport_mapping[ovs_port_id]
            self._del_from_topic_subscribed(topic, lport_id)
            return

        topic = lport.get_topic()

        LOG.info(_LI("The logical port(%s) is offline") % str(lport))
        try:
            self.controller.logical_port_deleted(lport_id)
        except Exception:
            LOG.exception(_LE(
                'Failed to process logical port offline event %s') % lport_id)
        finally:
            # TODO(duankebo) publish vm port offline later
            # currently we will not publish vm port offline event.
            # lport = self.nb_api.get_logical_port(lport_id)
            # if lport.get_chassis() == self.chassis_name:
            #    self.nb_api.update_lport(lport.get_id(), chassis=None,
            #                             status='DOWN')
            del self.ovs_to_lport_mapping[ovs_port_id]
            self._del_from_topic_subscribed(topic, lport_id)
dataset/ETHPy150Open openstack/dragonflow/dragonflow/controller/topology.py/Topology._vm_port_deleted/original