Opened 7 years ago

Closed 7 years ago

Last modified 4 years ago

#27666 closed Cleanup/optimization (fixed)

Delay rendering of models in migration operations when possible

Reported by: Markus Holtermann Owned by: Markus Holtermann
Component: Migrations Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Markus Holtermann)

As it turns out, when we delay the rendering of related models up to the point where it's necessary (just before RunPython, afaict), we can cut down migration time to a quarter and maybe more: https://github.com/MarkusH/django/commit/6b8280e0582d778944585e966404252c4994185e#commitcomment-19719252

PR: https://github.com/django/django/pull/7589

Given that 3rd party migration operations may need to enforce model rendering like we do for RunPython, we probably need to treat this as a backwards incompatible change, I suppose.

    def database_forwards(self, app_label, schema_editor, from_state, to_state):
        if from_state.is_delayed and 'apps' in from_state.__dict__:
            del from_state.__dict__['apps']
        # ...

Change History (7)

comment:1 by Markus Holtermann, 7 years ago

Owner: changed from nobody to Markus Holtermann
Status: newassigned

comment:2 by Markus Holtermann, 7 years ago

Triage Stage: UnreviewedAccepted

comment:3 by Markus Holtermann, 7 years ago

Description: modified (diff)

comment:4 by Markus Holtermann, 7 years ago

Needs documentation: unset

comment:5 by Tim Graham <timograham@…>, 7 years ago

Resolution: fixed
Status: assignedclosed

In 45ded05:

Fixed #27666 -- Delayed rendering of recursivly related models in migration operations.

comment:6 by Tim Graham <timograham@…>, 7 years ago

In 46e0335:

Refs #27666 -- Added ProjectState.reload_models().

comment:7 by Mariusz Felisiak <felisiak.mariusz@…>, 4 years ago

In 1d16c5d:

Refs #27666 -- Ensured relationship consistency on delayed reloads.

Delayed reloads of state models broke identity based relationships
between direct and non-direct ancestors.

Basing models.Options related objects map of model labels instead of
their identity ensured relationship consistency is maintained.

Refs #30966.

Co-authored-by: Hasan Ramezani <hasan.r67@…>

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