From 4bd9b81fbbaaf3bd3e0294a2143cb4e61b34ece8 Mon Sep 17 00:00:00 2001 From: huangtianhua Date: Mon, 12 Sep 2016 18:19:59 +0800 Subject: [PATCH] Release resource lock when executing reset_stack_status The heat cmd "heat-manage reset_stack_status {stack_id}" does not work, because we don't release resource lock, so this change to release lock to make sure it works. Change-Id: Ic42ad40e279c4e40da95d9aee35125767e747124 Closes-Bug: #1622533 --- heat/db/sqlalchemy/api.py | 3 ++- heat/tests/db/test_sqlalchemy_api.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/heat/db/sqlalchemy/api.py b/heat/db/sqlalchemy/api.py index 40db736d60..9bdb1d09d7 100644 --- a/heat/db/sqlalchemy/api.py +++ b/heat/db/sqlalchemy/api.py @@ -1559,7 +1559,8 @@ def reset_stack_status(context, stack_id, stack=None): query = context.session.query(models.Resource).filter_by( status='IN_PROGRESS', stack_id=stack_id) query.update({'status': 'FAILED', - 'status_reason': 'Stack status manually reset'}) + 'status_reason': 'Stack status manually reset', + 'engine_id': None}) query = context.session.query(models.ResourceData) query = query.join(models.Resource) diff --git a/heat/tests/db/test_sqlalchemy_api.py b/heat/tests/db/test_sqlalchemy_api.py index a266978a78..9ed2877a2b 100644 --- a/heat/tests/db/test_sqlalchemy_api.py +++ b/heat/tests/db/test_sqlalchemy_api.py @@ -3620,7 +3620,8 @@ class ResetStackStatusTests(common.HeatTestCase): def test_resource_reset(self): resource_progress = create_resource(self.ctx, self.stack, - status='IN_PROGRESS') + status='IN_PROGRESS', + engine_id=UUID2) resource_complete = create_resource(self.ctx, self.stack) db_api.reset_stack_status(self.ctx, self.stack.id) @@ -3628,6 +3629,7 @@ class ResetStackStatusTests(common.HeatTestCase): resource_progress = db_api.resource_get(self.ctx, resource_progress.id) self.assertEqual('complete', resource_complete.status) self.assertEqual('FAILED', resource_progress.status) + self.assertIsNone(resource_progress.engine_id) def test_hook_reset(self): resource = create_resource(self.ctx, self.stack) @@ -3645,7 +3647,8 @@ class ResetStackStatusTests(common.HeatTestCase): owner_id=self.stack.id) grandchild = create_stack(self.ctx, self.template, self.user_creds, owner_id=child.id, status='IN_PROGRESS') - resource = create_resource(self.ctx, grandchild, status='IN_PROGRESS') + resource = create_resource(self.ctx, grandchild, status='IN_PROGRESS', + engine_id=UUID2) db_api.reset_stack_status(self.ctx, self.stack.id) grandchild = db_api.stack_get(self.ctx, grandchild.id) @@ -3653,4 +3656,5 @@ class ResetStackStatusTests(common.HeatTestCase): resource = db_api.resource_get(self.ctx, resource.id) self.assertEqual('FAILED', grandchild.status) self.assertEqual('FAILED', resource.status) + self.assertIsNone(resource.engine_id) self.assertEqual('FAILED', self.stack.status)