summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorramishra <ramishra@redhat.com>2021-04-01 10:19:31 +0530
committerRabi Mishra <ramishra@redhat.com>2021-04-04 08:10:20 +0000
commite95a7fd21deea111d97b9e8e8ecff431091100d9 (patch)
tree0d047672425b5484d4d2c8299e20746ccef95975
parent49ef181bb229ded1131582a64fd4cba9be6fc953 (diff)
downloadheat-e95a7fd21deea111d97b9e8e8ecff431091100d9.tar.gz
Don't update status for replaced resource
With I04e7ad90944c2d03ce0e59ba16af9d60d6e01222 we allowed update of previously-existing resource if replacement creation has failed during last update. However, we force update the status of the existing resource to 'COMPLETE'. Therefore, in the next update if properties/type has not changed for the resource it won't try to update/replace the previously existing resource resulting in false positive of stack updated successfully. Task: 42194 Change-Id: Icc90a921ec67e49aec2c4acfad72235c57c78421 (cherry picked from commit bfbaab107d709c37548a22239b952c6221b9ac85)
-rw-r--r--heat/db/sqlalchemy/api.py3
-rw-r--r--heat/engine/resource.py2
-rw-r--r--heat/objects/resource.py3
-rw-r--r--heat/tests/db/test_sqlalchemy_api.py6
4 files changed, 2 insertions, 12 deletions
diff --git a/heat/db/sqlalchemy/api.py b/heat/db/sqlalchemy/api.py
index 8dc6b2b24..6536427e7 100644
--- a/heat/db/sqlalchemy/api.py
+++ b/heat/db/sqlalchemy/api.py
@@ -486,7 +486,7 @@ def resource_create(context, values):
@retry_on_db_error
def resource_create_replacement(context,
- existing_res_id, existing_res_values,
+ existing_res_id,
new_res_values,
atomic_key, expected_engine_id=None):
session = context.session
@@ -494,7 +494,6 @@ def resource_create_replacement(context,
with session.begin():
new_res = resource_create(context, new_res_values)
update_data = {'replaced_by': new_res.id}
- update_data.update(existing_res_values)
if not _try_resource_update(context,
existing_res_id, update_data,
atomic_key,
diff --git a/heat/engine/resource.py b/heat/engine/resource.py
index 8d0f04f42..dcfd7e5b5 100644
--- a/heat/engine/resource.py
+++ b/heat/engine/resource.py
@@ -403,7 +403,6 @@ class Resource(status.ResourceStatus):
'current_template_id': new_tmpl_id,
'stack_name': self.stack.name,
'root_stack_id': self.root_stack_id}
- update_data = {'status': self.COMPLETE}
# Retry in case a signal has updated the atomic_key
attempts = max(cfg.CONF.client_retry_limit, 0) + 1
@@ -427,7 +426,6 @@ class Resource(status.ResourceStatus):
def create_replacement():
return resource_objects.Resource.replacement(self.context,
self.id,
- update_data,
rs,
self._atomic_key)
diff --git a/heat/objects/resource.py b/heat/objects/resource.py
index 315f7f0a6..a8e480e86 100644
--- a/heat/objects/resource.py
+++ b/heat/objects/resource.py
@@ -201,12 +201,11 @@ class Resource(
@classmethod
def replacement(cls, context,
- existing_res_id, existing_res_values,
+ existing_res_id,
new_res_values,
atomic_key=0, expected_engine_id=None):
replacement = db_api.resource_create_replacement(context,
existing_res_id,
- existing_res_values,
new_res_values,
atomic_key,
expected_engine_id)
diff --git a/heat/tests/db/test_sqlalchemy_api.py b/heat/tests/db/test_sqlalchemy_api.py
index d5e1e523e..bc4bf2c3b 100644
--- a/heat/tests/db/test_sqlalchemy_api.py
+++ b/heat/tests/db/test_sqlalchemy_api.py
@@ -2670,7 +2670,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
repl = db_api.resource_create_replacement(
self.ctx,
orig.id,
- {'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'current_template_id': tmpl_id},
1, None)
@@ -2690,7 +2689,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
repl = db_api.resource_create_replacement(
self.ctx,
orig.id,
- {'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'current_template_id': tmpl_id},
1, None)
@@ -2708,7 +2706,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement,
self.ctx,
orig.id,
- {'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id,
'current_template_id': tmpl_id},
@@ -2732,7 +2729,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement,
self.ctx,
orig.id,
- {'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id,
'current_template_id': tmpl_id},
@@ -2750,7 +2746,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement,
self.ctx,
orig.id,
- {'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id,
'current_template_id': tmpl_id},
@@ -2775,7 +2770,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement,
self.ctx,
orig.id,
- {'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id,
'current_template_id': tmpl_id},