diff --git a/orquesta/conducting.py b/orquesta/conducting.py index a5441c25..04a0650f 100644 --- a/orquesta/conducting.py +++ b/orquesta/conducting.py @@ -1107,9 +1107,8 @@ def _evaluate_route(self, task_transition, prev_route): ) is_split_task = self.spec.tasks.is_split_task(task_id) - is_in_cycle = self.graph.in_cycle(task_id) - if not is_split_task or is_in_cycle: + if not is_split_task: return prev_route old_route_details = self.workflow_state.routes[prev_route] @@ -1121,6 +1120,11 @@ def _evaluate_route(self, task_transition, prev_route): if old_route_details == new_route_details: return prev_route + # The following is very computationally expensive; defer it as much as possible. + is_in_cycle = self.graph.in_cycle(task_id) + if is_in_cycle: + return prev_route + self.workflow_state.routes.append(new_route_details) return len(self.workflow_state.routes) - 1