Move notifications before DB retry decorator

This patch moves the start notifications emitted in the API
layer ('network.create.start', etc) to before the DB retry
decorator. This prevents benign retry events from resending
notifications onto the message bus.

Change-Id: I8159692a107ede397a4abeff71310a99fffa4862
Closes-Bug: #1532051
(cherry picked from commit 447f4b1461)
This commit is contained in:
Kevin Benton 2016-01-07 17:27:52 -08:00 committed by Assaf Muller
parent 84c969bd23
commit 2468b3d433

View File

@ -401,13 +401,16 @@ class Controller(object):
# We need a way for ensuring that if it has been created, # We need a way for ensuring that if it has been created,
# it is then deleted # it is then deleted
@db_api.retry_db_errors
def create(self, request, body=None, **kwargs): def create(self, request, body=None, **kwargs):
"""Creates a new instance of the requested entity."""
parent_id = kwargs.get(self._parent_id_name)
self._notifier.info(request.context, self._notifier.info(request.context,
self._resource + '.create.start', self._resource + '.create.start',
body) body)
return self._create(request, body, **kwargs)
@db_api.retry_db_errors
def _create(self, request, body, **kwargs):
"""Creates a new instance of the requested entity."""
parent_id = kwargs.get(self._parent_id_name)
body = Controller.prepare_request_body(request.context, body = Controller.prepare_request_body(request.context,
copy.deepcopy(body), True, copy.deepcopy(body), True,
self._resource, self._attr_info, self._resource, self._attr_info,
@ -519,12 +522,15 @@ class Controller(object):
return notify({self._resource: self._view(request.context, return notify({self._resource: self._view(request.context,
obj)}) obj)})
@db_api.retry_db_errors
def delete(self, request, id, **kwargs): def delete(self, request, id, **kwargs):
"""Deletes the specified entity.""" """Deletes the specified entity."""
self._notifier.info(request.context, self._notifier.info(request.context,
self._resource + '.delete.start', self._resource + '.delete.start',
{self._resource + '_id': id}) {self._resource + '_id': id})
return self._delete(request, id, **kwargs)
@db_api.retry_db_errors
def _delete(self, request, id, **kwargs):
action = self._plugin_handlers[self.DELETE] action = self._plugin_handlers[self.DELETE]
# Check authz # Check authz
@ -557,10 +563,8 @@ class Controller(object):
result, result,
notifier_method) notifier_method)
@db_api.retry_db_errors
def update(self, request, id, body=None, **kwargs): def update(self, request, id, body=None, **kwargs):
"""Updates the specified entity's attributes.""" """Updates the specified entity's attributes."""
parent_id = kwargs.get(self._parent_id_name)
try: try:
payload = body.copy() payload = body.copy()
except AttributeError: except AttributeError:
@ -570,6 +574,10 @@ class Controller(object):
self._notifier.info(request.context, self._notifier.info(request.context,
self._resource + '.update.start', self._resource + '.update.start',
payload) payload)
return self._update(request, id, body, **kwargs)
@db_api.retry_db_errors
def _update(self, request, id, body, **kwargs):
body = Controller.prepare_request_body(request.context, body, False, body = Controller.prepare_request_body(request.context, body, False,
self._resource, self._attr_info, self._resource, self._attr_info,
allow_bulk=self._allow_bulk) allow_bulk=self._allow_bulk)
@ -583,6 +591,7 @@ class Controller(object):
'default' not in value)] 'default' not in value)]
# Ensure policy engine is initialized # Ensure policy engine is initialized
policy.init() policy.init()
parent_id = kwargs.get(self._parent_id_name)
orig_obj = self._item(request, id, field_list=field_list, orig_obj = self._item(request, id, field_list=field_list,
parent_id=parent_id) parent_id=parent_id)
orig_object_copy = copy.copy(orig_obj) orig_object_copy = copy.copy(orig_obj)