[Python-modules-team] Bug#863267: Bug#863267: Miscalculates MigrationHistory dependencies between multiple django apps - regression from 1.8

Neil Williams codehelp at debian.org
Fri May 26 09:05:58 UTC 2017


On Fri, 26 May 2017 18:56:04 +1000
Brian May <bam at debian.org> wrote:

> Neil Williams <codehelp at debian.org> writes:
> 
> > django.db.migrations.exceptions.InconsistentMigrationHistory:
> > Migration lava_scheduler_app.0001_initial is applied before its
> > dependency linaro_django_xmlrpc.0001_initial on database
> > 'default'.  
> 
> Ok, I see what is going on now. Untested theory at the moment, but it
> fits the symptoms.
> 
> ./lava_scheduler_app/migrations/0001_initial.py contains:
> 
>     dependencies = [  
>         ('auth', '0001_initial'),  
>         migrations.swappable_dependency(settings.AUTH_USER_MODEL),  
>         ('linaro_django_xmlrpc', '__first__'),  
>         ('dashboard_app', '__first__'),  
>     ]  

Again, I also spotted this and thought it was the source. However,
changing this causes the migration to fail with 1.10 as there are
objects in this model which must be applied before
lava_scheduler_app/0001_initial will complete. e.g. the AuthToken
object is referred to directly in lava_scheduler_app/0001_initial and
this is defined by linaro_django_xmlrpc

I tried a few simplistic edits of those migration files on a test
instance, the migrations still fail to apply.

> 
> My reading of this is that this means this migration depends on the
> first migration from 'linaro_django_xmlrpc' to be already
> applied. However on Jessie, 'linaro_django_xmlrpc' has no
> migrations. Hence I suspect whatever version of Django that installed
> this migration to be buggy, because it didn't check the dependencies
> could be satisfied. Or maybe this was considered OK at the time.

7/9 Add initial Django migrations
    
    From a25d49c6c96217011fead69b675e281b6e5b8fc5 Mon Sep 17 00:00:00
    2001
    From: Raphaël Hertzog <hertzog at debian.org> Date: Tue, 9 Sep
    2014 07:20:56 +0000 

https://git.linaro.org/lava/lava-server.git/commit/?id=9e5595adae2b2ea6fc7e19820356ca1bd098110c

> This migration is already applied when we come to do the new
> migrations for Django 1.8 or Django 1.10
> 
> Django 1.8 doesn't care that the first migration for
> 'linaro_django_xmlrpc' hasn't been applied yet. As a result, it can
> fake the migration and everyone is happy.
> 
> Django 1.10 does care. It says the database is broken because the
> prerequisite for this migration was never applied. It does this check
> before applying any migrations.
> 
> I don't know for sure what is correct behaviour here.

Changing existing migration files *after* user data has been created is
likely to cause data loss.

> However I am
> inclined to think maybe this isn't a Django 1.10 fault, because the
> migration in Jessie clearly says it depends on a migration that was
> never applied - because it doesn't even exist at this point.

No. This is django making the wrong decision about problems it has
previously supported when trying to include bug fixes for other
problems. It is a regression in django 1.10.

-- 


Neil Williams
=============
http://www.linux.codehelp.co.uk/

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.alioth.debian.org/pipermail/python-modules-team/attachments/20170526/31385451/attachment.sig>


More information about the Python-modules-team mailing list