Allow offloading lookups in driver contexts

This allows segments looked up ahead of time to be passed
into NetworkContext objects and NetworkContext objects to
be passed into PortContext objects. This allows us to avoid
doing segments lookups for every PortContext construction
when handling a bunch of ports (e.g. in RPC handler).

Conflicts:
	neutron/plugins/ml2/driver_context.py

Change-Id: Ib4c43a7894fe1285ecf4bdf9af5e5f1b93b0b39b
Partial-Bug: #1665215
(cherry picked from commit 604e598a7d)
This commit is contained in:
Kevin Benton 2017-04-06 05:01:30 -07:00 committed by Ihar Hrachyshka
parent d963792542
commit a2ae48c2ce
1 changed files with 7 additions and 4 deletions

View File

@ -38,12 +38,12 @@ class MechanismDriverContext(object):
class NetworkContext(MechanismDriverContext, api.NetworkContext): class NetworkContext(MechanismDriverContext, api.NetworkContext):
def __init__(self, plugin, plugin_context, network, def __init__(self, plugin, plugin_context, network,
original_network=None): original_network=None, segments=None):
super(NetworkContext, self).__init__(plugin, plugin_context) super(NetworkContext, self).__init__(plugin, plugin_context)
self._network = network self._network = network
self._original_network = original_network self._original_network = original_network
self._segments = segments_db.get_network_segments( self._segments = segments_db.get_network_segments(
plugin_context, network['id']) plugin_context, network['id']) if segments is None else segments
@property @property
def current(self): def current(self):
@ -93,8 +93,11 @@ class PortContext(MechanismDriverContext, api.PortContext):
super(PortContext, self).__init__(plugin, plugin_context) super(PortContext, self).__init__(plugin, plugin_context)
self._port = port self._port = port
self._original_port = original_port self._original_port = original_port
self._network_context = NetworkContext(plugin, plugin_context, if isinstance(network, NetworkContext):
network) if network else None self._network_context = network
else:
self._network_context = NetworkContext(
plugin, plugin_context, network) if network else None
self._binding = binding self._binding = binding
self._binding_levels = binding_levels self._binding_levels = binding_levels
self._segments_to_bind = None self._segments_to_bind = None