mirror of
https://github.com/ansible/awx.git
synced 2026-02-22 21:46:00 -03:30
fix dfs_run_nodes()
* Tried to re-use the topological sort order to crawl the graph to find the next node(s) to run. This is incorrect, we need to take into account the fail/success of jobs and directionally crawl the graph.
This commit is contained in:
@@ -70,20 +70,32 @@ class WorkflowDAG(SimpleDAG):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def bfs_nodes_to_run(self):
|
def bfs_nodes_to_run(self):
|
||||||
|
nodes = self.get_root_nodes()
|
||||||
nodes_found = []
|
nodes_found = []
|
||||||
|
node_ids_visited = set()
|
||||||
|
|
||||||
|
for index, n in enumerate(nodes):
|
||||||
|
obj = n['node_object']
|
||||||
|
if obj.id in node_ids_visited:
|
||||||
|
continue
|
||||||
|
node_ids_visited.add(obj.id)
|
||||||
|
|
||||||
for node in self.sort_nodes_topological():
|
|
||||||
obj = node['node_object']
|
|
||||||
if obj.do_not_run is True:
|
if obj.do_not_run is True:
|
||||||
continue
|
continue
|
||||||
elif obj.job:
|
|
||||||
continue
|
if obj.job:
|
||||||
|
if obj.job.status in ['failed', 'error', 'canceled']:
|
||||||
|
nodes.extend(self.get_dependencies(obj, 'failure_nodes') +
|
||||||
|
self.get_dependencies(obj, 'always_nodes'))
|
||||||
|
elif obj.job.status == 'successful':
|
||||||
|
nodes.extend(self.get_dependencies(obj, 'success_nodes') +
|
||||||
|
self.get_dependencies(obj, 'always_nodes'))
|
||||||
elif obj.unified_job_template is None:
|
elif obj.unified_job_template is None:
|
||||||
continue
|
nodes.extend(self.get_dependencies(obj, 'failure_nodes') +
|
||||||
|
self.get_dependencies(obj, 'always_nodes'))
|
||||||
if self._are_relevant_parents_finished(node):
|
else:
|
||||||
nodes_found.append(node)
|
if self._are_relevant_parents_finished(n):
|
||||||
|
nodes_found.append(n)
|
||||||
return [n['node_object'] for n in nodes_found]
|
return [n['node_object'] for n in nodes_found]
|
||||||
|
|
||||||
def cancel_node_jobs(self):
|
def cancel_node_jobs(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user