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
This commit is contained in:
Rakesh H S 2015-11-10 14:12:01 +05:30
parent 83b9ad952d
commit 441d52f0fe
2 changed files with 29 additions and 2 deletions

View File

@ -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):

View File

@ -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):