diff options
author | Zuul <zuul@review.opendev.org> | 2019-12-20 06:37:28 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2019-12-20 06:37:28 +0000 |
commit | 759bfae5b8494de545e5d997441d4991ce6d53fe (patch) | |
tree | 8e810b08c4e72468e4d41e312a3e17940db4ef1c | |
parent | 36475f30e175344dce3b0f223ade3ced8f970ca3 (diff) | |
parent | 0abf43535d63e294f4649acff0f5e4a6e9c37275 (diff) | |
download | heat-759bfae5b8494de545e5d997441d4991ce6d53fe.tar.gz |
Merge "Don't use wrap_db_retry on subtransaction in resource_create_replacement()" into stable/train
-rw-r--r-- | heat/db/sqlalchemy/api.py | 16 | ||||
-rw-r--r-- | heat/tests/db/test_sqlalchemy_api.py | 8 |
2 files changed, 16 insertions, 8 deletions
diff --git a/heat/db/sqlalchemy/api.py b/heat/db/sqlalchemy/api.py index 3966b0e3a..583e2cd78 100644 --- a/heat/db/sqlalchemy/api.py +++ b/heat/db/sqlalchemy/api.py @@ -260,6 +260,12 @@ def _add_atomic_key_to_values(values, atomic_key): retry_interval=0.5, inc_retry_interval=True) def resource_update(context, resource_id, values, atomic_key, expected_engine_id=None): + return _try_resource_update(context, resource_id, values, atomic_key, + expected_engine_id) + + +def _try_resource_update(context, resource_id, values, atomic_key, + expected_engine_id=None): session = context.session with session.begin(subtransactions=True): _add_atomic_key_to_values(values, atomic_key) @@ -448,6 +454,8 @@ def resource_create(context, values): return resource_ref +@oslo_db_api.wrap_db_retry(max_retries=3, retry_on_deadlock=True, + retry_interval=0.5, inc_retry_interval=True) def resource_create_replacement(context, existing_res_id, existing_res_values, new_res_values, @@ -458,10 +466,10 @@ def resource_create_replacement(context, new_res = resource_create(context, new_res_values) update_data = {'replaced_by': new_res.id} update_data.update(existing_res_values) - if not resource_update(context, - existing_res_id, update_data, - atomic_key, - expected_engine_id=expected_engine_id): + if not _try_resource_update(context, + existing_res_id, update_data, + atomic_key, + expected_engine_id=expected_engine_id): data = {} if 'name' in new_res_values: data['resource_name'] = new_res_values['name'] diff --git a/heat/tests/db/test_sqlalchemy_api.py b/heat/tests/db/test_sqlalchemy_api.py index 096d3b88f..77821a7e2 100644 --- a/heat/tests/db/test_sqlalchemy_api.py +++ b/heat/tests/db/test_sqlalchemy_api.py @@ -2685,8 +2685,8 @@ class DBAPIResourceReplacementTest(common.HeatTestCase): db_api.resource_update_and_save(other_ctx, orig.id, {'atomic_key': 2}) - self.patchobject(db_api, 'resource_update', - new=mock.Mock(wraps=db_api.resource_update, + self.patchobject(db_api, '_try_resource_update', + new=mock.Mock(wraps=db_api._try_resource_update, side_effect=update_atomic_key)) self.assertRaises(exception.UpdateInProgress, @@ -2728,8 +2728,8 @@ class DBAPIResourceReplacementTest(common.HeatTestCase): {'engine_id': 'a', 'atomic_key': 2}) - self.patchobject(db_api, 'resource_update', - new=mock.Mock(wraps=db_api.resource_update, + self.patchobject(db_api, '_try_resource_update', + new=mock.Mock(wraps=db_api._try_resource_update, side_effect=lock_resource)) self.assertRaises(exception.UpdateInProgress, |