Merge "Don't retry service update in report_state"
This commit is contained in:
@@ -294,12 +294,12 @@ def service_create(context, values):
|
|||||||
return IMPL.service_create(context, values)
|
return IMPL.service_create(context, values)
|
||||||
|
|
||||||
|
|
||||||
def service_update(context, service_id, values):
|
def service_update(context, service_id, values, retry=True):
|
||||||
"""Set the given properties on an service and update it.
|
"""Set the given properties on an service and update it.
|
||||||
|
|
||||||
Raises NotFound if service does not exist.
|
Raises NotFound if service does not exist.
|
||||||
"""
|
"""
|
||||||
return IMPL.service_update(context, service_id, values)
|
return IMPL.service_update(context, service_id, values, retry)
|
||||||
|
|
||||||
|
|
||||||
def service_get_by_uuid(context, service_uuid):
|
def service_get_by_uuid(context, service_uuid):
|
||||||
|
|||||||
@@ -936,21 +936,32 @@ def service_create(context, values):
|
|||||||
|
|
||||||
|
|
||||||
@require_admin_context
|
@require_admin_context
|
||||||
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
|
|
||||||
@main_context_manager.writer
|
@main_context_manager.writer
|
||||||
def service_update(context, service_id, values):
|
def service_update(context, service_id, values, retry=True):
|
||||||
query = _service_query(context, id=service_id)
|
def _service_update(context, service_id, values):
|
||||||
|
query = _service_query(context, id=service_id)
|
||||||
|
|
||||||
if 'disabled' in values:
|
if 'disabled' in values:
|
||||||
entity = query.column_descriptions[0]['entity']
|
entity = query.column_descriptions[0]['entity']
|
||||||
|
|
||||||
values = values.copy()
|
values = values.copy()
|
||||||
values['modified_at'] = values.get('modified_at', timeutils.utcnow())
|
values['modified_at'] = values.get('modified_at',
|
||||||
values['updated_at'] = values.get('updated_at', entity.updated_at)
|
timeutils.utcnow())
|
||||||
|
values['updated_at'] = values.get('updated_at',
|
||||||
|
entity.updated_at)
|
||||||
|
|
||||||
result = query.update(values)
|
result = query.update(values)
|
||||||
if not result:
|
if not result:
|
||||||
raise exception.ServiceNotFound(service_id=service_id)
|
raise exception.ServiceNotFound(service_id=service_id)
|
||||||
|
|
||||||
|
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
|
||||||
|
def _service_update_retry(context, service_id, values):
|
||||||
|
_service_update(context, service_id, values)
|
||||||
|
|
||||||
|
if retry:
|
||||||
|
_service_update_retry(context, service_id, values)
|
||||||
|
else:
|
||||||
|
_service_update(context, service_id, values)
|
||||||
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
|
|||||||
@@ -153,13 +153,13 @@ class Service(base.CinderPersistentObject, base.CinderObject,
|
|||||||
db_service = db.service_create(self._context, updates)
|
db_service = db.service_create(self._context, updates)
|
||||||
self._from_db_object(self._context, self, db_service)
|
self._from_db_object(self._context, self, db_service)
|
||||||
|
|
||||||
def save(self):
|
def save(self, retry=True):
|
||||||
updates = self.cinder_obj_get_changes()
|
updates = self.cinder_obj_get_changes()
|
||||||
if 'cluster' in updates:
|
if 'cluster' in updates:
|
||||||
raise exception.ObjectActionError(
|
raise exception.ObjectActionError(
|
||||||
action='save', reason=_('cluster changed'))
|
action='save', reason=_('cluster changed'))
|
||||||
if updates:
|
if updates:
|
||||||
db.service_update(self._context, self.id, updates)
|
db.service_update(self._context, self.id, updates, retry)
|
||||||
self.obj_reset_changes()
|
self.obj_reset_changes()
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
|
|||||||
@@ -486,7 +486,7 @@ class Service(service.Service):
|
|||||||
if self.availability_zone != service_ref.availability_zone:
|
if self.availability_zone != service_ref.availability_zone:
|
||||||
service_ref.availability_zone = self.availability_zone
|
service_ref.availability_zone = self.availability_zone
|
||||||
|
|
||||||
service_ref.save()
|
service_ref.save(retry=False)
|
||||||
|
|
||||||
# TODO(termie): make this pattern be more elegant.
|
# TODO(termie): make this pattern be more elegant.
|
||||||
if getattr(self, 'model_disconnected', False):
|
if getattr(self, 'model_disconnected', False):
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ def fake_service_get_by_id(value):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def fake_service_update(context, service_id, values):
|
def fake_service_update(context, service_id, values, retry=True):
|
||||||
service = fake_service_get_by_id(service_id)
|
service = fake_service_get_by_id(service_id)
|
||||||
if service is None:
|
if service is None:
|
||||||
raise exception.ServiceNotFound(service_id=service_id)
|
raise exception.ServiceNotFound(service_id=service_id)
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class TestService(test_objects.BaseObjectsTestCase):
|
|||||||
service.topic = 'foobar'
|
service.topic = 'foobar'
|
||||||
service.save()
|
service.save()
|
||||||
service_update.assert_called_once_with(self.context, service.id,
|
service_update.assert_called_once_with(self.context, service.id,
|
||||||
{'topic': 'foobar'})
|
{'topic': 'foobar'}, True)
|
||||||
|
|
||||||
@mock.patch('oslo_utils.timeutils.utcnow', return_value=timeutils.utcnow())
|
@mock.patch('oslo_utils.timeutils.utcnow', return_value=timeutils.utcnow())
|
||||||
@mock.patch('cinder.db.sqlalchemy.api.service_destroy')
|
@mock.patch('cinder.db.sqlalchemy.api.service_destroy')
|
||||||
|
|||||||
Reference in New Issue
Block a user