use payloads for SEGMENT BEFORE_DELETE callbacks
This patch switches over to the payload style of callbacks for SEGMENT BEFORE_DELETE events. It does so by using the publish callback function with DBEventPayload payloads. Corresponding listener callbacks are updated where necessary. NeutronLibImpact Change-Id: I64031129ad458d4468a316a9385288ced091d333
This commit is contained in:
parent
1e0a5b901a
commit
ddc72ebd41
|
@ -333,23 +333,23 @@ def is_dhcp_active_on_any_subnet(context, subnet_ids):
|
||||||
|
|
||||||
|
|
||||||
def _prevent_segment_delete_with_port_bound(resource, event, trigger,
|
def _prevent_segment_delete_with_port_bound(resource, event, trigger,
|
||||||
context, segment,
|
payload=None):
|
||||||
for_net_delete=False):
|
|
||||||
"""Raise exception if there are any ports bound with segment_id."""
|
"""Raise exception if there are any ports bound with segment_id."""
|
||||||
if for_net_delete:
|
if payload.metadata.get('for_net_delete'):
|
||||||
# don't check for network deletes
|
# don't check for network deletes
|
||||||
return
|
return
|
||||||
|
|
||||||
with db_api.CONTEXT_READER.using(context):
|
with db_api.CONTEXT_READER.using(payload.context):
|
||||||
port_ids = port_obj.Port.get_port_ids_filter_by_segment_id(
|
port_ids = port_obj.Port.get_port_ids_filter_by_segment_id(
|
||||||
context, segment_id=segment['id'])
|
payload.context, segment_id=payload.resource_id)
|
||||||
|
|
||||||
# There are still some ports in the segment, segment should not be deleted
|
# There are still some ports in the segment, segment should not be deleted
|
||||||
# TODO(xiaohhui): Should we delete the dhcp port automatically here?
|
# TODO(xiaohhui): Should we delete the dhcp port automatically here?
|
||||||
if port_ids:
|
if port_ids:
|
||||||
reason = _("The segment is still bound with port(s) "
|
reason = _("The segment is still bound with port(s) "
|
||||||
"%s") % ", ".join(port_ids)
|
"%s") % ", ".join(port_ids)
|
||||||
raise seg_exc.SegmentInUse(segment_id=segment['id'], reason=reason)
|
raise seg_exc.SegmentInUse(segment_id=payload.resource_id,
|
||||||
|
reason=reason)
|
||||||
|
|
||||||
|
|
||||||
def subscribe():
|
def subscribe():
|
||||||
|
|
|
@ -165,9 +165,13 @@ class SegmentDbMixin(common_db_mixin.CommonDbMixin):
|
||||||
"""Delete an existing segment."""
|
"""Delete an existing segment."""
|
||||||
segment_dict = self.get_segment(context, uuid)
|
segment_dict = self.get_segment(context, uuid)
|
||||||
# Do some preliminary operations before deleting the segment
|
# Do some preliminary operations before deleting the segment
|
||||||
registry.notify(resources.SEGMENT, events.BEFORE_DELETE,
|
registry.publish(resources.SEGMENT, events.BEFORE_DELETE,
|
||||||
self.delete_segment, context=context,
|
self.delete_segment,
|
||||||
segment=segment_dict, for_net_delete=for_net_delete)
|
payload=events.DBEventPayload(
|
||||||
|
context, metadata={
|
||||||
|
'for_net_delete': for_net_delete},
|
||||||
|
states=(segment_dict,),
|
||||||
|
resource_id=uuid))
|
||||||
|
|
||||||
# Delete segment in DB
|
# Delete segment in DB
|
||||||
with db_api.CONTEXT_WRITER.using(context):
|
with db_api.CONTEXT_WRITER.using(context):
|
||||||
|
|
|
@ -110,14 +110,13 @@ class Plugin(db.SegmentDbMixin, segment.SegmentPluginBase):
|
||||||
|
|
||||||
@registry.receives(resources.SEGMENT, [events.BEFORE_DELETE])
|
@registry.receives(resources.SEGMENT, [events.BEFORE_DELETE])
|
||||||
def _prevent_segment_delete_with_subnet_associated(
|
def _prevent_segment_delete_with_subnet_associated(
|
||||||
self, resource, event, trigger, context, segment,
|
self, resource, event, trigger, payload=None):
|
||||||
for_net_delete=False):
|
|
||||||
"""Raise exception if there are any subnets associated with segment."""
|
"""Raise exception if there are any subnets associated with segment."""
|
||||||
if for_net_delete:
|
if payload.metadata.get('for_net_delete'):
|
||||||
# don't check if this is a part of a network delete operation
|
# don't check if this is a part of a network delete operation
|
||||||
return
|
return
|
||||||
segment_id = segment['id']
|
segment_id = payload.resource_id
|
||||||
subnets = subnet_obj.Subnet.get_objects(context,
|
subnets = subnet_obj.Subnet.get_objects(payload.context,
|
||||||
segment_id=segment_id)
|
segment_id=segment_id)
|
||||||
subnet_ids = [s.id for s in subnets]
|
subnet_ids = [s.id for s in subnets]
|
||||||
|
|
||||||
|
|
|
@ -3092,9 +3092,10 @@ class TestML2Segments(Ml2PluginV2TestCase):
|
||||||
segment = segments_db.get_network_segments(
|
segment = segments_db.get_network_segments(
|
||||||
self.context, port['port']['network_id'])[0]
|
self.context, port['port']['network_id'])[0]
|
||||||
segment['network_id'] = port['port']['network_id']
|
segment['network_id'] = port['port']['network_id']
|
||||||
self.assertRaises(c_exc.CallbackFailure, registry.notify,
|
self.assertRaises(c_exc.CallbackFailure, registry.publish,
|
||||||
resources.SEGMENT, events.BEFORE_DELETE,
|
resources.SEGMENT, events.BEFORE_DELETE,
|
||||||
mock.ANY,
|
mock.ANY, payload=events.DBEventPayload(
|
||||||
context=self.context, segment=segment)
|
self.context, states=(segment,),
|
||||||
|
resource_id=segment['id']))
|
||||||
exist_port = self._show('ports', port['port']['id'])
|
exist_port = self._show('ports', port['port']['id'])
|
||||||
self.assertEqual(port['port']['id'], exist_port['port']['id'])
|
self.assertEqual(port['port']['id'], exist_port['port']['id'])
|
||||||
|
|
Loading…
Reference in New Issue