From 5dabde032f0e845b252880ebd7c0ef794f524cd1 Mon Sep 17 00:00:00 2001 From: Kevin Benton Date: Tue, 7 Feb 2017 00:55:51 -0800 Subject: [PATCH] Switch external network create event to precommit This addresses a TODO to convert the notification event to PRECOMMIT_CREATE instead of BEFORE_CREATE and AFTER_CREATE since both of these are occuring in a transaction which violates the AFTER semantics. Change-Id: Idba21275ade85a1a4afadee00de9ccbaec49b2f9 --- neutron/db/external_net_db.py | 23 ++++++++--------------- neutron/services/auto_allocate/db.py | 4 +--- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/neutron/db/external_net_db.py b/neutron/db/external_net_db.py index 196a241c68f..dcc4a4f709d 100644 --- a/neutron/db/external_net_db.py +++ b/neutron/db/external_net_db.py @@ -103,27 +103,20 @@ class External_net_db_mixin(object): if not external_set: return - # TODO(armax): these notifications should switch to *_COMMIT - # when the event becomes available, as this block is expected - # to be called within a plugin's session if external: - try: - registry.notify( - resources.EXTERNAL_NETWORK, events.BEFORE_CREATE, - self, context=context, - request=req_data, network=net_data) - except c_exc.CallbackFailure as e: - # raise the underlying exception - raise e.errors[0].error context.session.add( ext_net_models.ExternalNetwork(network_id=net_data['id'])) context.session.add(rbac_db.NetworkRBAC( object_id=net_data['id'], action='access_as_external', target_tenant='*', tenant_id=net_data['tenant_id'])) - registry.notify( - resources.EXTERNAL_NETWORK, events.AFTER_CREATE, - self, context=context, - request=req_data, network=net_data) + try: + registry.notify( + resources.EXTERNAL_NETWORK, events.PRECOMMIT_CREATE, + self, context=context, + request=req_data, network=net_data) + except c_exc.CallbackFailure as e: + # raise the underlying exception + raise e.errors[0].error net_data[external_net.EXTERNAL] = external def _process_l3_update(self, context, net_data, req_data, allow_all=True): diff --git a/neutron/services/auto_allocate/db.py b/neutron/services/auto_allocate/db.py index 01648afb8b8..5110d5824a1 100644 --- a/neutron/services/auto_allocate/db.py +++ b/neutron/services/auto_allocate/db.py @@ -81,9 +81,7 @@ class AutoAllocatedTopologyMixin(common_db_mixin.CommonDbMixin): new = super(AutoAllocatedTopologyMixin, cls).__new__(cls, *args, **kwargs) registry.subscribe(_ensure_external_network_default_value_callback, - resources.EXTERNAL_NETWORK, events.BEFORE_CREATE) - registry.subscribe(_ensure_external_network_default_value_callback, - resources.EXTERNAL_NETWORK, events.AFTER_CREATE) + resources.EXTERNAL_NETWORK, events.PRECOMMIT_CREATE) registry.subscribe(_ensure_external_network_default_value_callback, resources.EXTERNAL_NETWORK, events.BEFORE_UPDATE) return new