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
This commit is contained in:
ramishra 2021-04-01 10:19:31 +05:30
parent 6ff0dc2e19
commit bfbaab107d
4 changed files with 2 additions and 12 deletions

View File

@ -494,7 +494,7 @@ def resource_create(context, values):
@retry_on_db_error @retry_on_db_error
def resource_create_replacement(context, def resource_create_replacement(context,
existing_res_id, existing_res_values, existing_res_id,
new_res_values, new_res_values,
atomic_key, expected_engine_id=None): atomic_key, expected_engine_id=None):
session = context.session session = context.session
@ -502,7 +502,6 @@ def resource_create_replacement(context,
with session.begin(): with session.begin():
new_res = resource_create(context, new_res_values) new_res = resource_create(context, new_res_values)
update_data = {'replaced_by': new_res.id} update_data = {'replaced_by': new_res.id}
update_data.update(existing_res_values)
if not _try_resource_update(context, if not _try_resource_update(context,
existing_res_id, update_data, existing_res_id, update_data,
atomic_key, atomic_key,

View File

@ -403,7 +403,6 @@ class Resource(status.ResourceStatus):
'current_template_id': new_tmpl_id, 'current_template_id': new_tmpl_id,
'stack_name': self.stack.name, 'stack_name': self.stack.name,
'root_stack_id': self.root_stack_id} 'root_stack_id': self.root_stack_id}
update_data = {'status': self.COMPLETE}
# Retry in case a signal has updated the atomic_key # Retry in case a signal has updated the atomic_key
attempts = max(cfg.CONF.client_retry_limit, 0) + 1 attempts = max(cfg.CONF.client_retry_limit, 0) + 1
@ -427,7 +426,6 @@ class Resource(status.ResourceStatus):
def create_replacement(): def create_replacement():
return resource_objects.Resource.replacement(self.context, return resource_objects.Resource.replacement(self.context,
self.id, self.id,
update_data,
rs, rs,
self._atomic_key) self._atomic_key)

View File

@ -200,12 +200,11 @@ class Resource(
@classmethod @classmethod
def replacement(cls, context, def replacement(cls, context,
existing_res_id, existing_res_values, existing_res_id,
new_res_values, new_res_values,
atomic_key=0, expected_engine_id=None): atomic_key=0, expected_engine_id=None):
replacement = db_api.resource_create_replacement(context, replacement = db_api.resource_create_replacement(context,
existing_res_id, existing_res_id,
existing_res_values,
new_res_values, new_res_values,
atomic_key, atomic_key,
expected_engine_id) expected_engine_id)

View File

@ -2668,7 +2668,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
repl = db_api.resource_create_replacement( repl = db_api.resource_create_replacement(
self.ctx, self.ctx,
orig.id, orig.id,
{'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id, {'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'current_template_id': tmpl_id}, 'stack_id': orig.stack_id, 'current_template_id': tmpl_id},
1, None) 1, None)
@ -2688,7 +2687,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
repl = db_api.resource_create_replacement( repl = db_api.resource_create_replacement(
self.ctx, self.ctx,
orig.id, orig.id,
{'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id, {'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'current_template_id': tmpl_id}, 'stack_id': orig.stack_id, 'current_template_id': tmpl_id},
1, None) 1, None)
@ -2706,7 +2704,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement, db_api.resource_create_replacement,
self.ctx, self.ctx,
orig.id, orig.id,
{'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id, {'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'stack_id': orig.stack_id,
'current_template_id': tmpl_id}, 'current_template_id': tmpl_id},
@ -2730,7 +2727,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement, db_api.resource_create_replacement,
self.ctx, self.ctx,
orig.id, orig.id,
{'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id, {'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'stack_id': orig.stack_id,
'current_template_id': tmpl_id}, 'current_template_id': tmpl_id},
@ -2748,7 +2744,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement, db_api.resource_create_replacement,
self.ctx, self.ctx,
orig.id, orig.id,
{'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id, {'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'stack_id': orig.stack_id,
'current_template_id': tmpl_id}, 'current_template_id': tmpl_id},
@ -2773,7 +2768,6 @@ class DBAPIResourceReplacementTest(common.HeatTestCase):
db_api.resource_create_replacement, db_api.resource_create_replacement,
self.ctx, self.ctx,
orig.id, orig.id,
{'status_reason': 'test replacement'},
{'name': orig.name, 'replaces': orig.id, {'name': orig.name, 'replaces': orig.id,
'stack_id': orig.stack_id, 'stack_id': orig.stack_id,
'current_template_id': tmpl_id}, 'current_template_id': tmpl_id},