summaryrefslogtreecommitdiff
path: root/django/db/migrations/executor.py
diff options
context:
space:
mode:
authorMarten Kenbeek <marten.knbk@gmail.com>2015-02-20 05:43:45 +0100
committerMarkus Holtermann <info@markusholtermann.eu>2015-02-23 12:55:43 +0100
commit980dfca7174a3e00a214ad554bb9199529139796 (patch)
treea5c5954377992cace273c243d934c3ec3f281a64 /django/db/migrations/executor.py
parented941ef2d0c0560e4eb98e0801e698d18f01d77b (diff)
[1.8.x] Fixed #24366 -- Optimized traversal of large migration dependency graphs.
Switched from an adjancency list and uncached, iterative depth-first search to a Node-based design with direct parent/child links and a cached, recursive depth-first search. With this change, calculating a migration plan for a large graph takes several seconds instead of several hours. Marked test `migrations.test_graph.GraphTests.test_dfs` as an expected failure due to reaching the maximum recursion depth. Backport of 78d43a5e1064b63db1c486516c4263ef1c4c975c from master
Diffstat (limited to 'django/db/migrations/executor.py')
-rw-r--r--django/db/migrations/executor.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/django/db/migrations/executor.py b/django/db/migrations/executor.py
index d1a8dd64dc..57b1e297a5 100644
--- a/django/db/migrations/executor.py
+++ b/django/db/migrations/executor.py
@@ -47,7 +47,7 @@ class MigrationExecutor(object):
# child(ren) in the same app, and no further.
next_in_app = sorted(
n for n in
- self.loader.graph.dependents.get(target, set())
+ self.loader.graph.node_map[target].children
if n[0] == target[0]
)
for node in next_in_app: