diff --git a/heat/engine/check_resource.py b/heat/engine/check_resource.py index 5a790a41a2..1cf7556b1b 100644 --- a/heat/engine/check_resource.py +++ b/heat/engine/check_resource.py @@ -249,7 +249,8 @@ class CheckResource(object): try: input_forward_data = None - for req_node in deps.required_by(graph_key): + for req_node in sorted(deps.required_by(graph_key), + key=lambda n: n.is_update): input_data = _get_input_data(req_node, input_forward_data) if req_node.is_update: input_forward_data = input_data diff --git a/heat/engine/stack.py b/heat/engine/stack.py index 9ed192d2af..2d60fc1865 100644 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -1346,10 +1346,11 @@ class Stack(collections.Mapping): self.context, self.id, self.current_traversal, True, self.id) leaves = set(self.convergence_dependencies.leaves()) - if not any(leaves): + if not leaves: self.mark_complete() else: - for rsrc_id, is_update in self.convergence_dependencies.leaves(): + for rsrc_id, is_update in sorted(leaves, + key=lambda n: n.is_update): if is_update: LOG.info("Triggering resource %s for update", rsrc_id) else: diff --git a/heat/tests/test_convg_stack.py b/heat/tests/test_convg_stack.py index afb3bef5ef..1d985035a9 100644 --- a/heat/tests/test_convg_stack.py +++ b/heat/tests/test_convg_stack.py @@ -67,7 +67,7 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase): self.assertEqual({'edges': [[[1, True], None]]}, stack_db.current_deps) leaves = stack.convergence_dependencies.leaves() expected_calls = [] - for rsrc_id, is_update in leaves: + for rsrc_id, is_update in sorted(leaves, key=lambda n: n.is_update): expected_calls.append( mock.call.worker_client.WorkerClient.check_resource( stack.context, rsrc_id, stack.current_traversal, @@ -123,7 +123,7 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase): leaves = stack.convergence_dependencies.leaves() expected_calls = [] - for rsrc_id, is_update in leaves: + for rsrc_id, is_update in sorted(leaves, key=lambda n: n.is_update): expected_calls.append( mock.call.worker_client.WorkerClient.check_resource( stack.context, rsrc_id, stack.current_traversal, @@ -263,15 +263,15 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase): leaves = stack.convergence_dependencies.leaves() expected_calls = [] - for rsrc_id, is_update in leaves: + for rsrc_id, is_update in sorted(leaves, key=lambda n: n.is_update): expected_calls.append( mock.call.worker_client.WorkerClient.check_resource( stack.context, rsrc_id, stack.current_traversal, {'input_data': {}}, is_update, None, False)) - leaves = curr_stack.convergence_dependencies.leaves() - for rsrc_id, is_update in leaves: + leaves = set(curr_stack.convergence_dependencies.leaves()) + for rsrc_id, is_update in sorted(leaves, key=lambda n: n.is_update): expected_calls.append( mock.call.worker_client.WorkerClient.check_resource( curr_stack.context, rsrc_id, curr_stack.current_traversal, @@ -346,7 +346,7 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase): leaves = stack.convergence_dependencies.leaves() expected_calls = [] - for rsrc_id, is_update in leaves: + for rsrc_id, is_update in sorted(leaves, key=lambda n: n.is_update): expected_calls.append( mock.call.worker_client.WorkerClient.check_resource( stack.context, rsrc_id, stack.current_traversal, @@ -354,7 +354,7 @@ class StackConvergenceCreateUpdateDeleteTest(common.HeatTestCase): is_update, None, False)) leaves = curr_stack.convergence_dependencies.leaves() - for rsrc_id, is_update in leaves: + for rsrc_id, is_update in sorted(leaves, key=lambda n: n.is_update): expected_calls.append( mock.call.worker_client.WorkerClient.check_resource( curr_stack.context, rsrc_id, curr_stack.current_traversal,