From 9073ba02c86ae12d7e29e2d7f81ea603ed09e4bf Mon Sep 17 00:00:00 2001 From: Thomas Morin Date: Mon, 3 Oct 2016 16:01:42 +0200 Subject: [PATCH] bagpipe: rely on Port AFTER_DELETE callbacks Now that ML2-generated Port AFTER_UPDATE registry notifications have complete port information, we can use the AFTER_DELETE callbacks, which is the right moment to react on Port deletion. Change-Id: I84fb6fc63de03ffcba9c1d0ef2772d31429a6031 Partial-Bug: 1576440 --- .../service_drivers/bagpipe/bagpipe.py | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/networking_bgpvpn/neutron/services/service_drivers/bagpipe/bagpipe.py b/networking_bgpvpn/neutron/services/service_drivers/bagpipe/bagpipe.py index e8a9e8c5..eb5e3ef6 100644 --- a/networking_bgpvpn/neutron/services/service_drivers/bagpipe/bagpipe.py +++ b/networking_bgpvpn/neutron/services/service_drivers/bagpipe/bagpipe.py @@ -19,13 +19,11 @@ from sqlalchemy import sql from neutron.callbacks import events from neutron.callbacks import registry from neutron.callbacks import resources -from neutron import context as n_context from neutron.db import external_net_db from neutron.db import l3_db from neutron.db import models_v2 from neutron.debug import debug_agent from neutron.extensions import portbindings -from neutron import manager from neutron_lib import constants as const from neutron_lib import exceptions as n_exc @@ -164,16 +162,8 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver): registry.subscribe(self.registry_port_updated, resources.PORT, events.AFTER_UPDATE) - # we need to subscribe to before_delete events, because - # on after_delete events the port is already removed from the db - # and we can't retrieve the binding:host_id information (which - # is not passed in the event either) registry.subscribe(self.registry_port_deleted, resources.PORT, - events.BEFORE_DELETE) - - # REVISIT(tmorin): if/when port ABORT_DELETE events are implemented - # we will have to revisit the issue, so that the action done after - # BEFORE_DELETE is reverted if needed (or a different solution) + events.AFTER_DELETE) registry.subscribe(self.registry_port_created, resources.PORT, events.AFTER_CREATE) @@ -363,11 +353,6 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver): net_assoc['network_id']) self.agent_rpc.delete_bgpvpn(context, formated_bgpvpn) - def _get_port(self, context, port_id): - _core_plugin = manager.NeutronManager.get_plugin() - # TODO(tmorin): should not need an admin context - return _core_plugin.get_port(n_context.get_admin_context(), port_id) - def _ignore_port(self, context, port): if (port['device_owner'].startswith(const.DEVICE_OWNER_NETWORK_PREFIX) and not port['device_owner'] in @@ -483,7 +468,7 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver): @log_helpers.log_method_call def registry_port_updated(self, resource, event, trigger, **kwargs): try: - context = kwargs.get('context') + context = kwargs['context'] port = kwargs['port'] original_port = kwargs['original_port'] @@ -521,11 +506,7 @@ class BaGPipeBGPVPNDriver(driver_api.BGPVPNDriver): def registry_port_deleted(self, resource, event, trigger, **kwargs): try: context = kwargs['context'] - port_id = kwargs['port_id'] - # required because PORT BEFORE_DELETE event does - # not have detailed port information, in particular - # portbinding.HOST_ID - port = self._get_port(context, port_id) + port = kwargs['port'] if port['device_owner'] == const.DEVICE_OWNER_ROUTER_INTF: self.router_interface_removed(context, port)

AltStyle によって変換されたページ (->オリジナル) /