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)
(cherry picked from commit a2ae48c2ce)
This commit is contained in:
Kevin Benton 2017-04-06 05:01:30 -07:00 committed by Ihar Hrachyshka
parent 85c9daea13
commit bd7055daf2
1 changed files with 11 additions and 5 deletions

View File

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