From 441d52f0fe4b1a334859d50f534b205c029928e3 Mon Sep 17 00:00:00 2001 From: Rakesh H S Date: Tue, 10 Nov 2015 14:12:01 +0530 Subject: [PATCH] Convergence: Avoid sync point delete for stack CREATE Previous traversal sync points should be deleted in case of concurrent updates. However, in case of stack CREATE there won't be any previous traversal sync points to delete. Hence avoid hitting the DB. Change-Id: If61332107a1f4d70a590f7db87b6c10bc9cf7b2c --- heat/engine/stack.py | 6 ++++-- heat/tests/test_convg_stack.py | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/heat/engine/stack.py b/heat/engine/stack.py index 6c2748f87d..63f2f89809 100644 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -1015,12 +1015,14 @@ class Stack(collections.Mapping): self.store() + # delete the prev traversal sync_points + if previous_traversal: + sync_point.delete_all(self.context, self.id, previous_traversal) + # TODO(later): lifecycle_plugin_utils.do_pre_ops self.state_set(action, self.IN_PROGRESS, 'Stack %s started' % action) - # delete the prev traversal sync_points - sync_point.delete_all(self.context, self.id, previous_traversal) self._converge_create_or_update() def _converge_create_or_update(self): diff --git a/heat/tests/test_convg_stack.py b/heat/tests/test_convg_stack.py index 3614ad73e1..112d3b80e8 100644 --- a/heat/tests/test_convg_stack.py +++ b/heat/tests/test_convg_stack.py @@ -461,6 +461,31 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase): self.assertIsNotNone(stack.updated_time) self.assertTrue(mock_ccu.called) + @mock.patch.object(parser.Stack, '_converge_create_or_update') + @mock.patch.object(sync_point_object.SyncPoint, + 'delete_all_by_stack_and_traversal') + def test_sync_point_delete_stack_create(self, mock_syncpoint_del, + mock_ccu, mock_cr): + stack = parser.Stack(utils.dummy_context(), 'convg_updated_time_test', + templatem.Template.create_empty_template()) + stack.converge_stack(template=stack.t, action=stack.CREATE) + self.assertFalse(mock_syncpoint_del.called) + self.assertTrue(mock_ccu.called) + + @mock.patch.object(parser.Stack, '_converge_create_or_update') + @mock.patch.object(sync_point_object.SyncPoint, + 'delete_all_by_stack_and_traversal') + def test_sync_point_delete_stack_update(self, mock_syncpoint_del, + mock_ccu, mock_cr): + tmpl = {'HeatTemplateFormatVersion': '2012-12-12', + 'Resources': {'R1': {'Type': 'GenericResourceType'}}} + stack = parser.Stack(utils.dummy_context(), 'updated_time_test', + templatem.Template(tmpl)) + stack.current_traversal = 'prev_traversal' + stack.converge_stack(template=stack.t, action=stack.UPDATE) + self.assertTrue(mock_syncpoint_del.called) + self.assertTrue(mock_ccu.called) + class TestConvgStackRollback(common.HeatTestCase):