Merge "Improve Network delete performance"
This commit is contained in:
commit
6293a7325c
|
@ -507,7 +507,8 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
|
||||||
network_db = self._get_network(context, id)
|
network_db = self._get_network(context, id)
|
||||||
network = self._make_network_dict(network_db, context=context)
|
network = self._make_network_dict(network_db, context=context)
|
||||||
registry.notify(resources.NETWORK, events.PRECOMMIT_DELETE,
|
registry.notify(resources.NETWORK, events.PRECOMMIT_DELETE,
|
||||||
self, context=context, network_id=id)
|
self, context=context, network_id=id,
|
||||||
|
network=network)
|
||||||
# We expire network_db here because precommit deletion
|
# We expire network_db here because precommit deletion
|
||||||
# might have left the relationship stale, for example,
|
# might have left the relationship stale, for example,
|
||||||
# if we deleted a segment.
|
# if we deleted a segment.
|
||||||
|
|
|
@ -1228,7 +1228,8 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||||
priority=0)
|
priority=0)
|
||||||
def _network_delete_precommit_handler(self, rtype, event, trigger,
|
def _network_delete_precommit_handler(self, rtype, event, trigger,
|
||||||
context, network_id, **kwargs):
|
context, network_id, **kwargs):
|
||||||
network = self.get_network(context, network_id)
|
network = (kwargs.get('network') or
|
||||||
|
self.get_network(context, network_id))
|
||||||
mech_context = driver_context.NetworkContext(self,
|
mech_context = driver_context.NetworkContext(self,
|
||||||
context,
|
context,
|
||||||
network)
|
network)
|
||||||
|
@ -2302,12 +2303,14 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||||
# TODO(boden); refactor into _handle_segment_change once all
|
# TODO(boden); refactor into _handle_segment_change once all
|
||||||
# event types use payloads
|
# event types use payloads
|
||||||
return self._handle_segment_change(
|
return self._handle_segment_change(
|
||||||
rtype, event, trigger, payload.context, payload.latest_state)
|
rtype, event, trigger, payload.context, payload.latest_state,
|
||||||
|
for_net_delete=payload.metadata.get('for_net_delete'))
|
||||||
|
|
||||||
@registry.receives(resources.SEGMENT, (events.PRECOMMIT_CREATE,
|
@registry.receives(resources.SEGMENT, (events.PRECOMMIT_CREATE,
|
||||||
events.PRECOMMIT_DELETE,
|
events.PRECOMMIT_DELETE,
|
||||||
events.AFTER_CREATE))
|
events.AFTER_CREATE))
|
||||||
def _handle_segment_change(self, rtype, event, trigger, context, segment):
|
def _handle_segment_change(self, rtype, event, trigger, context, segment,
|
||||||
|
for_net_delete=False):
|
||||||
if (event == events.PRECOMMIT_CREATE and
|
if (event == events.PRECOMMIT_CREATE and
|
||||||
not isinstance(trigger, segments_plugin.Plugin)):
|
not isinstance(trigger, segments_plugin.Plugin)):
|
||||||
# TODO(xiaohhui): Now, when create network, ml2 will reserve
|
# TODO(xiaohhui): Now, when create network, ml2 will reserve
|
||||||
|
@ -2328,6 +2331,9 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2,
|
||||||
elif event == events.PRECOMMIT_DELETE:
|
elif event == events.PRECOMMIT_DELETE:
|
||||||
self.type_manager.release_network_segment(context, segment)
|
self.type_manager.release_network_segment(context, segment)
|
||||||
|
|
||||||
|
if for_net_delete:
|
||||||
|
return
|
||||||
|
|
||||||
# change in segments could affect resulting network mtu, so let's
|
# change in segments could affect resulting network mtu, so let's
|
||||||
# recalculate it
|
# recalculate it
|
||||||
network_db = self._get_network(context, network_id)
|
network_db = self._get_network(context, network_id)
|
||||||
|
|
|
@ -202,12 +202,15 @@ class SegmentDbMixin(object):
|
||||||
# Do some preliminary operations before deleting segment in db
|
# Do some preliminary operations before deleting segment in db
|
||||||
registry.notify(resources.SEGMENT, events.PRECOMMIT_DELETE,
|
registry.notify(resources.SEGMENT, events.PRECOMMIT_DELETE,
|
||||||
self.delete_segment, context=context,
|
self.delete_segment, context=context,
|
||||||
segment=segment_dict)
|
segment=segment_dict,
|
||||||
|
for_net_delete=for_net_delete)
|
||||||
|
|
||||||
registry.publish(resources.SEGMENT, events.AFTER_DELETE,
|
registry.publish(resources.SEGMENT, events.AFTER_DELETE,
|
||||||
self.delete_segment,
|
self.delete_segment,
|
||||||
payload=events.DBEventPayload(
|
payload=events.DBEventPayload(
|
||||||
context, states=(segment_dict,),
|
context, metadata={
|
||||||
|
FOR_NET_DELETE: for_net_delete},
|
||||||
|
states=(segment_dict,),
|
||||||
resource_id=uuid))
|
resource_id=uuid))
|
||||||
|
|
||||||
|
|
||||||
|
@ -333,7 +336,7 @@ def _add_segment_host_mapping_for_segment(resource, event, trigger,
|
||||||
|
|
||||||
|
|
||||||
def _delete_segments_for_network(resource, event, trigger,
|
def _delete_segments_for_network(resource, event, trigger,
|
||||||
context, network_id):
|
context, network_id, **kwargs):
|
||||||
admin_ctx = common_utils.get_elevated_context(context)
|
admin_ctx = common_utils.get_elevated_context(context)
|
||||||
global segments_plugin
|
global segments_plugin
|
||||||
if not segments_plugin:
|
if not segments_plugin:
|
||||||
|
|
|
@ -420,7 +420,8 @@ class TestSegment(SegmentTestCase):
|
||||||
events.PRECOMMIT_DELETE,
|
events.PRECOMMIT_DELETE,
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
context=mock.ANY,
|
context=mock.ANY,
|
||||||
network_id=mock.ANY)
|
network_id=mock.ANY,
|
||||||
|
network=mock.ANY)
|
||||||
|
|
||||||
|
|
||||||
class TestSegmentML2(SegmentTestCase):
|
class TestSegmentML2(SegmentTestCase):
|
||||||
|
|
Loading…
Reference in New Issue