diff --git a/awx/main/migrations/0050_v340_workflow_convergence.py b/awx/main/migrations/0051_v340_workflow_convergence.py similarity index 85% rename from awx/main/migrations/0050_v340_workflow_convergence.py rename to awx/main/migrations/0051_v340_workflow_convergence.py index 2e6edd42d7..c874acb2e2 100644 --- a/awx/main/migrations/0050_v340_workflow_convergence.py +++ b/awx/main/migrations/0051_v340_workflow_convergence.py @@ -8,7 +8,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('main', '0049_v330_validate_instance_capacity_adjustment'), + ('main', '0050_v340_drop_celery_tables'), ] operations = [ diff --git a/awx/main/scheduler/dag_simple.py b/awx/main/scheduler/dag_simple.py index b82a7b808b..a8d96b4be6 100644 --- a/awx/main/scheduler/dag_simple.py +++ b/awx/main/scheduler/dag_simple.py @@ -123,26 +123,24 @@ class SimpleDAG(object): def has_cycle(self): node_objs = [node['node_object'] for node in self.get_root_nodes()] - nodes_visited = set([]) + node_objs_visited = set([]) path = set([]) stack = node_objs - path_direction = 'DOWN' while stack: node_obj = stack.pop() - children = self.get_dependencies(node_obj) - for child in children: - if child['node_object'] not in nodes_visited: - stack.append(child['node_object']) - if node_obj in path: - return True + children = [node['node_object'] for node in self.get_dependencies(node_obj)] + children_to_add = filter(lambda node_obj: node_obj not in node_objs_visited, children) - if not children: - path_direction = 'UP' - - if path_direction == 'DOWN': + if children_to_add: + if node_obj in path: + return True path.add(node_obj) - elif path_direction == 'UP': + stack.append(node_obj) + stack.extend(children_to_add) + else: + node_objs_visited.add(node_obj) path.discard(node_obj) + return False