Convergence: Re-trigger stack operation

Ensure stack operation is re-triggered when SynPointNotFound is
encountered and stack is updated (have new traversal ID).

Change-Id: Ia1b670aa5766c57dafdcc84d642c42007371a087
This commit is contained in:
Anant Patil 2015-07-17 14:32:10 +05:30
parent 72f8bc4abc
commit f1e1a73b83
2 changed files with 22 additions and 2 deletions

View File

@ -174,7 +174,7 @@ class WorkerService(service.Service):
def _retrigger_check_resource(self, cnxt, is_update, resource_id, stack):
current_traversal = stack.current_traversal
graph = self._compute_dependencies(stack).graph()
key = sync_point.make_key(resource_id, current_traversal, is_update)
key = (resource_id, is_update)
predecessors = graph[key]
def do_check(target_key, data):
@ -184,7 +184,7 @@ class WorkerService(service.Service):
try:
sync_point.sync(cnxt, resource_id, current_traversal, is_update,
do_check, predecessors, {key: None})
except sync_point.sync_points.NotFound:
except sync_point.SyncPointNotFound:
pass
def _initiate_propagate_resource(self, cnxt, resource_id,

View File

@ -380,6 +380,26 @@ class CheckWorkflowUpdateTest(common.HeatTestCase):
mock_rcr.assert_called_once_with(self.ctx, self.is_update,
self.resource.id, updated_stack)
@mock.patch.object(sync_point, 'sync')
def test_retrigger_check_resource(self, mock_sync, mock_cru, mock_crc,
mock_pcr, mock_csc, mock_cid):
self.is_update = True
resC = self.stack['C']
expected_graph_key = (resC.id, self.is_update)
# A, B are predecessors to C when is_update is True
expected_predecessors = {(self.stack['A'].id, True),
(self.stack['B'].id, True)}
self.worker._retrigger_check_resource(self.ctx, self.is_update,
resC.id, self.stack)
mock_sync.assert_called_once_with(self.ctx, resC.id,
self.stack.current_traversal,
self.is_update, mock.ANY,
mock.ANY,
{expected_graph_key: None})
call_args, call_kwargs = mock_sync.call_args
actual_predecessors = call_args[5]
self.assertItemsEqual(expected_predecessors, actual_predecessors)
@mock.patch.object(worker, 'construct_input_data')
@mock.patch.object(worker, 'check_stack_complete')