# Generated by Django 4.2.16 on 2024-10-30 17:57
|
|
from django.db import migrations, models
|
from django.db import connections
|
from django.conf import settings
|
|
from core.models import AsyncMigrationStatus
|
from core.redis import start_job_async_or_sync
|
|
import logging
|
logger = logging.getLogger(__name__)
|
migration_name = '0052_auto_20241030_1757'
|
|
def forward_migration(migration_name, db_alias):
|
migration = AsyncMigrationStatus.objects.using(db_alias).create(
|
name=migration_name,
|
status=AsyncMigrationStatus.STATUS_STARTED,
|
)
|
logger.info(f'Start async migration {migration_name}')
|
|
conn = connections[db_alias]
|
if conn.vendor == 'sqlite':
|
sql_update_created_at = """
|
UPDATE tasks_tasklock
|
SET created_at = datetime(expire_at, %s);
|
"""
|
sql_params = (f'-{settings.TASK_LOCK_TTL} seconds',)
|
else:
|
sql_update_created_at = """
|
UPDATE tasks_tasklock
|
SET created_at = expire_at - INTERVAL %s;
|
"""
|
sql_params = ('%s seconds' % settings.TASK_LOCK_TTL,)
|
|
with conn.cursor() as cursor:
|
cursor.execute(sql_update_created_at, sql_params)
|
|
migration.status = AsyncMigrationStatus.STATUS_FINISHED
|
migration.save(using=db_alias)
|
logger.info(f'Async migration {migration_name} complete')
|
|
def forwards(apps, schema_editor):
|
# Dispatch migrations to rqworkers
|
db_alias = schema_editor.connection.alias
|
start_job_async_or_sync(forward_migration, migration_name=migration_name, db_alias=db_alias)
|
|
def backwards(apps, schema_editor):
|
pass
|
|
class Migration(migrations.Migration):
|
atomic = False
|
|
dependencies = [
|
('tasks', '0051_tasklock_created_at'),
|
]
|
|
operations = [
|
migrations.AlterField(
|
model_name='tasklock',
|
name='created_at',
|
field=models.DateTimeField(auto_now_add=True, help_text='Creation time', null=True, verbose_name='created at'),
|
),
|
migrations.RunPython(forwards, backwards),
|
]
|