Merge "Use @registry.receives in neutron.services.trunk"

This commit is contained in:
Jenkins 2017-03-15 06:26:48 +00:00 committed by Gerrit Code Review
commit db2eeb9d88
5 changed files with 23 additions and 29 deletions

View File

@ -21,6 +21,7 @@ from neutron.services.trunk import constants as trunk_consts
from neutron.services.trunk.rpc import backend
@registry.has_registry_receivers
class DriverBase(object):
def __init__(self, name, interfaces, segmentation_types,
@ -40,9 +41,6 @@ class DriverBase(object):
self.segmentation_types = segmentation_types
self.agent_type = agent_type
self.can_trunk_bound_port = can_trunk_bound_port
registry.subscribe(self.register,
trunk_consts.TRUNK_PLUGIN,
events.AFTER_INIT)
@abc.abstractproperty
def is_loaded(self):
@ -62,6 +60,7 @@ class DriverBase(object):
"""True if the driver is compatible with the agent type."""
return agent_type == self.agent_type
@registry.receives(trunk_consts.TRUNK_PLUGIN, [events.AFTER_INIT])
def register(self, resource, event, trigger, **kwargs):
"""Register the trunk driver.

View File

@ -34,6 +34,7 @@ def init_handler(resource, event, trigger, agent=None):
LinuxBridgeTrunkDriver()
@registry.has_registry_receivers
class LinuxBridgeTrunkDriver(trunk_rpc.TrunkSkeleton):
"""Driver responsible for handling trunk/subport/port events.
@ -45,12 +46,6 @@ class LinuxBridgeTrunkDriver(trunk_rpc.TrunkSkeleton):
def __init__(self, plumber=None, trunk_api=None):
self._plumber = plumber or trunk_plumber.Plumber()
self._tapi = trunk_api or _TrunkAPI(trunk_rpc.TrunkStub())
registry.subscribe(self.agent_port_change,
local_resources.PORT_DEVICE,
local_events.AFTER_UPDATE)
registry.subscribe(self.agent_port_delete,
local_resources.PORT_DEVICE,
local_events.AFTER_DELETE)
super(LinuxBridgeTrunkDriver, self).__init__()
def handle_trunks(self, context, resource_type, trunks, event_type):
@ -79,6 +74,8 @@ class LinuxBridgeTrunkDriver(trunk_rpc.TrunkSkeleton):
continue
self.wire_trunk(context, trunk)
@registry.receives(local_resources.PORT_DEVICE,
[local_events.AFTER_DELETE])
def agent_port_delete(self, resource, event, trigger, context, port_id,
**kwargs):
"""Agent informed us a VIF was removed."""
@ -88,6 +85,8 @@ class LinuxBridgeTrunkDriver(trunk_rpc.TrunkSkeleton):
# don't want to race with another agent that the trunk may have been
# moved to.
@registry.receives(local_resources.PORT_DEVICE,
[local_events.AFTER_UPDATE])
def agent_port_change(self, resource, event, trigger, context,
device_details, **kwargs):
"""The agent hath informed us thusly of a port update or create."""

View File

@ -108,6 +108,7 @@ def bridge_has_service_port(bridge):
return bridge_has_port(bridge, is_trunk_service_port)
@registry.has_registry_receivers
class OVSDBHandler(object):
"""It listens to OVSDB events to create the physical resources associated
to a logical trunk in response to OVSDB events (such as VM boot and/or
@ -120,15 +121,12 @@ class OVSDBHandler(object):
self.trunk_manager = trunk_manager
self.trunk_rpc = agent.TrunkStub()
registry.subscribe(self.process_trunk_port_events,
ovs_agent_constants.OVSDB_RESOURCE,
events.AFTER_READ)
@property
def context(self):
self._context.request_id = o_context.generate_request_id()
return self._context
@registry.receives(ovs_agent_constants.OVSDB_RESOURCE, [events.AFTER_READ])
def process_trunk_port_events(
self, resource, event, trigger, ovsdb_events):
"""Process added and removed port events coming from OVSDB monitor."""

View File

@ -60,6 +60,7 @@ def _extend_port_trunk_details(core_plugin, port_res, port_db):
return port_res
@registry.has_registry_receivers
class TrunkPlugin(service_base.ServicePluginBase,
common_db_mixin.CommonDbMixin):
@ -79,11 +80,6 @@ class TrunkPlugin(service_base.ServicePluginBase,
drivers.register()
registry.subscribe(rules.enforce_port_deletion_rules,
resources.PORT, events.BEFORE_DELETE)
# NOTE(tidwellr) Consider keying off of PRECOMMIT_UPDATE if we find
# AFTER_UPDATE to be problematic for setting trunk status when a
# a parent port becomes unbound.
registry.subscribe(self._trigger_trunk_status_change,
resources.PORT, events.AFTER_UPDATE)
registry.notify(constants.TRUNK_PLUGIN, events.AFTER_INIT, self)
for driver in self._drivers:
LOG.debug('Trunk plugin loaded with driver %s', driver.name)
@ -396,6 +392,10 @@ class TrunkPlugin(service_base.ServicePluginBase,
return obj
# NOTE(tidwellr) Consider keying off of PRECOMMIT_UPDATE if we find
# AFTER_UPDATE to be problematic for setting trunk status when a
# a parent port becomes unbound.
@registry.receives(resources.PORT, [events.AFTER_UPDATE])
def _trigger_trunk_status_change(self, resource, event, trigger, **kwargs):
updated_port = kwargs['port']
trunk_details = updated_port.get('trunk_details')

View File

@ -22,6 +22,7 @@ from neutron.services.trunk.rpc import server
LOG = logging.getLogger(__name__)
@registry.has_registry_receivers
class ServerSideRpcBackend(object):
"""The Neutron Server RPC backend."""
@ -30,19 +31,16 @@ class ServerSideRpcBackend(object):
self._skeleton = server.TrunkSkeleton()
self._stub = server.TrunkStub()
# Set up listeners to trunk events: they dispatch RPC messages
# to agents as needed. These are designed to work with any
# agent-based driver that may integrate with the trunk service
# plugin, e.g. linux bridge or ovs.
for event in (events.AFTER_CREATE, events.AFTER_DELETE):
registry.subscribe(self.process_event,
trunk_consts.TRUNK,
event)
registry.subscribe(self.process_event,
trunk_consts.SUBPORTS,
event)
LOG.debug("RPC backend initialized for trunk plugin")
# Set up listeners to trunk events: they dispatch RPC messages
# to agents as needed. These are designed to work with any
# agent-based driver that may integrate with the trunk service
# plugin, e.g. linux bridge or ovs.
@registry.receives(trunk_consts.TRUNK,
[events.AFTER_CREATE, events.AFTER_DELETE])
@registry.receives(trunk_consts.SUBPORTS,
[events.AFTER_CREATE, events.AFTER_DELETE])
def process_event(self, resource, event, trunk_plugin, payload):
"""Emit RPC notifications to registered subscribers."""
context = payload.context