Skip to content

Commit bf3354a

Browse files
authored
Fix: Get rid of recursion when calculating skipped nodes (#4538)
1 parent 66b4252 commit bf3354a

2 files changed

Lines changed: 15 additions & 8 deletions

File tree

sqlmesh/utils/concurrency.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,23 @@ def _skip_next_nodes(self, parent: H) -> None:
105105
self._finished_future.set_result(None)
106106
return
107107

108-
skipped_nodes = [node for node, deps in self._unprocessed_nodes.items() if parent in deps]
108+
skipped_nodes = {node for node, deps in self._unprocessed_nodes.items() if parent in deps}
109109

110-
self._skipped_nodes.extend(skipped_nodes)
110+
while skipped_nodes:
111+
self._skipped_nodes.extend(skipped_nodes)
111112

112-
for skipped_node in skipped_nodes:
113-
self._unprocessed_nodes_num -= 1
114-
self._unprocessed_nodes.pop(skipped_node)
113+
for skipped_node in skipped_nodes:
114+
self._unprocessed_nodes_num -= 1
115+
self._unprocessed_nodes.pop(skipped_node)
116+
117+
skipped_nodes = {
118+
node
119+
for node, deps in self._unprocessed_nodes.items()
120+
if skipped_nodes.intersection(deps)
121+
}
115122

116-
for skipped_node in skipped_nodes:
117-
self._skip_next_nodes(skipped_node)
123+
if not self._unprocessed_nodes_num:
124+
self._finished_future.set_result(None)
118125

119126
def _init_state(self) -> None:
120127
self._unprocessed_nodes = self.dag.graph

tests/utils/test_concurrency.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def raise_(snapshot):
139139
assert len(errors) == 1
140140
assert errors[0].node == failed_snapshot.snapshot_id
141141

142-
assert skipped == [snapshot_a.snapshot_id, snapshot_b.snapshot_id, snapshot_c.snapshot_id]
142+
assert set(skipped) == {snapshot_a.snapshot_id, snapshot_b.snapshot_id, snapshot_c.snapshot_id}
143143

144144

145145
@pytest.mark.parametrize("tasks_num", [1, 3])

0 commit comments

Comments
 (0)