From 5ca25b924efdb77da2c04d306effc3bb5a8d97c5 Mon Sep 17 00:00:00 2001 From: Aaron Tan Date: Mon, 24 Oct 2016 11:06:25 -0400 Subject: [PATCH 1/2] Add missing always_node check in bfs --- awx/main/scheduler/dag_workflow.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/awx/main/scheduler/dag_workflow.py b/awx/main/scheduler/dag_workflow.py index c891b2ec32..6d2b349365 100644 --- a/awx/main/scheduler/dag_workflow.py +++ b/awx/main/scheduler/dag_workflow.py @@ -42,7 +42,9 @@ class WorkflowDAG(SimpleDAG): nodes.extend(children_all) elif job.status in ['successful']: children_success = self.get_dependencies(obj, 'success_nodes') - nodes.extend(children_success) + children_always = self.get_dependencies(obj, 'always_nodes') + children_all = children_success + children_always + nodes.extend(children_all) return [n['node_object'] for n in nodes_found] def is_workflow_done(self): @@ -67,6 +69,8 @@ class WorkflowDAG(SimpleDAG): nodes.extend(children_all) elif job.status in ['successful']: children_success = self.get_dependencies(obj, 'success_nodes') - nodes.extend(children_success) + children_always = self.get_dependencies(obj, 'always_nodes') + children_all = children_success + children_always + nodes.extend(children_all) return True From ffeb2b22a492febf12c0e8232ca078e775fe02c5 Mon Sep 17 00:00:00 2001 From: Aaron Tan Date: Tue, 25 Oct 2016 19:28:24 -0400 Subject: [PATCH 2/2] Unit test added. --- awx/main/tests/unit/scheduler/test_dag.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/awx/main/tests/unit/scheduler/test_dag.py b/awx/main/tests/unit/scheduler/test_dag.py index 84fb2d37f2..ab1e45c3d8 100644 --- a/awx/main/tests/unit/scheduler/test_dag.py +++ b/awx/main/tests/unit/scheduler/test_dag.py @@ -154,7 +154,25 @@ def workflow_dag_finished(factory_node): expected = [] return (dag, expected, True) -@pytest.fixture(params=['workflow_dag_multiple_roots', 'workflow_dag_level_2', 'workflow_dag_multiple_edges_labeled', 'workflow_dag_finished']) +@pytest.fixture +def workflow_dag_always(factory_node): + dag = WorkflowDAG() + data = [ + factory_node(0, 'failed'), + factory_node(1, 'successful'), + factory_node(2, None), + ] + [dag.add_node(d) for d in data] + + dag.add_edge(data[0], data[1], 'always_nodes') + dag.add_edge(data[1], data[2], 'always_nodes') + + expected = data[2:3] + return (dag, expected, False) + +@pytest.fixture(params=['workflow_dag_multiple_roots', 'workflow_dag_level_2', + 'workflow_dag_multiple_edges_labeled', 'workflow_dag_finished', + 'workflow_dag_always']) def workflow_dag(request): return request.getfuncargvalue(request.param)