Opened 11 months ago

Closed 11 months ago

Last modified 11 months ago

#23315 closed Bug (fixed)

Cannot resolve operation dependencies

Reported by: gabejackson Owned by: timgraham
Component: Migrations Version: 1.7-rc-2
Severity: Release blocker Keywords: migrations, autodetector, circular dependency
Cc: cmawebsite@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

The auto detector cannot create migrations for the project located at: https://github.com/gabejackson/django-migration-test
Using Django==1.7c2 and python 2.7.5
The command used is:

./manage.py makemigrations --dry-run

which leads to:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/core/management/base.py", line 337, in execute
    output = self.handle(*args, **options)
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 111, in handle
    convert_apps=app_labels or None,
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 50, in changes
    changes = self._detect_changes(convert_apps, graph)
  File "/Users/gabejackson/venv/django-1.7/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 288, in _detect_changes
    raise ValueError("Cannot resolve operation dependencies")
ValueError: Cannot resolve operation dependencies

Change History (12)

comment:1 Changed 11 months ago by gabejackson

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

I further reduced the model to only 2 apps and 4 models. I found out that the auto-detector is non-deterministic depending on the alphabetical names of the models.
If you run the project with the class APackage it will fail with "Cannot resolve operation deps". If you rename APackage to DPackage (DPackage is alphabetically now later than DeliveryCountry) and run makemigrations --dry-run again, it works...

Apparently there is some issue with sorting classes alphabetically. Hope this helps..

comment:2 Changed 11 months ago by collinanderson

  • Cc cmawebsite@… added
  • Triage Stage changed from Unreviewed to Accepted

I get the same error with these simple models on the latest code. It's a circular dependency of ForeignKeys between apps, and I don't see anything saying that this isn't supported.

comment:3 Changed 11 months ago by collinanderson

I've reproduced the project from scratch just to be sure. Here are the simple models: https://github.com/collinanderson/ticket23315/commit/c813d1b7e8b46f86d0fb01e7d19bb69e80c8b76a

Last edited 11 months ago by collinanderson (previous) (diff)

comment:4 Changed 11 months ago by Andrew Godwin <andrew@…>

  • Resolution set to fixed
  • Status changed from new to closed

In 9247da1032c1b8c98b0fcfb278bbbdbc8edc8783:

Fixed #23315: Operational dependency fail with mixed create/add

comment:5 Changed 11 months ago by Andrew Godwin <andrew@…>

In 824e02bf836affa182dd4bcb7b3e1796f1389b38:

[1.7.x] Fixed #23315: Operational dependency fail with mixed create/add

comment:6 Changed 11 months ago by timgraham

  • Resolution fixed deleted
  • Status changed from closed to new

The new test fails on Python 3.4:

======================================================================
ERROR [0.001s]: test_circular_dependency_mixed_addcreate (migrations.test_autodetector.AutodetectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/jenkins/workspace/django-master/database/sqlite3/python/python3.4/tests/migrations/test_autodetector.py", line 1099, in test_circular_dependency_mixed_addcreate
    changes = autodetector._detect_changes()
  File "/home/jenkins/workspace/django-master/database/sqlite3/python/python3.4/django/db/migrations/autodetector.py", line 172, in _detect_changes
    self.generate_created_models()
  File "/home/jenkins/workspace/django-master/database/sqlite3/python/python3.4/django/db/migrations/autodetector.py", line 497, in generate_created_models
    dep_app_label = field.rel.to._meta.app_label
AttributeError: 'str' object has no attribute '_meta'

The string is "a.person" (but resolves to <class 'Person'> when the test passes).

comment:7 Changed 11 months ago by timgraham

  • Owner changed from nobody to timgraham
  • Status changed from new to assigned

I'm looking into this. It seems to be a non-deterministic issue, perhaps ordering related.

comment:8 Changed 11 months ago by andrewgodwin

That's odd, because all the other relationships in that test file are fine under 3.4. It's likely an issue in the State's reconstruction of it. Happy to look at this instead if you want to hand it over.

comment:9 Changed 11 months ago by Tim Graham <timograham@…>

In d1299fce0eeeb2a7749fecafc87260462e75aac9:

Fixed migrations tests added in refs #23315.

comment:10 Changed 11 months ago by Tim Graham <timograham@…>

In 6981eced83ea2d6462b21c12ecea044e02e56d05:

[1.7.x] Fixed migrations tests added in refs #23315.

Backport of d1299fce0e from master

comment:11 Changed 11 months ago by timgraham

  • Resolution set to fixed
  • Status changed from assigned to closed

do_pending_lookups wasn't resolving the field due to a case mismatch.

comment:12 Changed 11 months ago by Andrew Godwin <andrew@…>

In 9247da1032c1b8c98b0fcfb278bbbdbc8edc8783:

Fixed #23315: Operational dependency fail with mixed create/add

Note: See TracTickets for help on using tickets.
Back to Top