#30490: migrations unique_index on (app, name).
-------------------------------------+-------------------------------------
     Reporter:  Richard              |                    Owner:  nobody
  Kojedzinszky                       |
         Type:  Bug                  |                   Status:  new
    Component:  Uncategorized        |                  Version:  master
     Severity:  Normal               |               Resolution:
     Keywords:  migrations parallel  |             Triage Stage:
  run                                |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Changes (by Richard Kojedzinszky):

 * status:  closed => new
 * resolution:  wontfix =>


Comment:

 Unfortunately, knowing that the migration tasks and recording its
 existence is not run in the same transaction, in a worst case scenario,
 the info that a migration has been applied can be lost at all. So, in any
 circumstances, they should be in the same transaction.


 Replying to [ticket:30490 Richard Kojedzinszky]:
 > I've a django based api service. I run it in containers, in kubernetes.
 When I update my image, basically I run the migiration process, then start
 the application. With k8s for example, when I start the deployment with 2
 or more replicas, actually 2 parallel running migration process will
 start. With the following very simple migration process, unfortunately the
 migration will be applied twice:
 >
 > {{{
 > from django.db import migrations
 > from django.db.models import F
 > import time
 >
 > def forward(apps, schema_editor):
 >     TT = apps.get_model('center', 'TestTable')
 >     time.sleep(10)
 >     TT.objects.all().update(value=F('value') + 1)
 >
 > def backward(apps, schema_editor):
 >     TT = apps.get_model('center', 'TestTable')
 >     TT.objects.all().update(value=F('value') - 1)
 >
 >
 > class Migration(migrations.Migration):
 >
 >     dependencies = [
 >         ('center', '0007_testtable'),
 >     ]
 >
 >     operations = [
 >             migrations.RunPython(forward, backward)
 >     ]
 > }}}
 >
 > Even if the migration process is ran in a transaction, due to the unique
 index missing, it will be applied multiple times.
 >
 > Even though my setup may be rare, I think it would really be necessary
 to prevent migrations to be applied more than once. Db unique_together
 could be utilized for that.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30490#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/071.f02cff911c4fa2edd59dc31d6490418d%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to