Scheduled exports: Lock exports while setting their new time

This commit is contained in:
Raphael Michel
2023-01-19 16:31:47 +01:00
parent 8b74f791f4
commit c29dc49819

View File

@@ -26,6 +26,7 @@ from typing import Any, Dict, Union
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from django.conf import settings from django.conf import settings
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.db import connection
from django.dispatch import receiver from django.dispatch import receiver
from django.utils.timezone import now, override from django.utils.timezone import now, override
from django.utils.translation import gettext from django.utils.translation import gettext
@@ -331,7 +332,7 @@ def run_scheduled_exports(sender, **kwargs):
qs = ScheduledEventExport.objects.filter( qs = ScheduledEventExport.objects.filter(
schedule_next_run__lt=now(), schedule_next_run__lt=now(),
error_counter__lt=5, error_counter__lt=5,
).select_related('event') ).select_for_update(skip_locked=connection.features.has_select_for_update_skip_locked).select_related('event')
for s in qs: for s in qs:
scheduled_event_export.apply_async(kwargs={ scheduled_event_export.apply_async(kwargs={
'event': s.event_id, 'event': s.event_id,
@@ -342,7 +343,7 @@ def run_scheduled_exports(sender, **kwargs):
qs = ScheduledOrganizerExport.objects.filter( qs = ScheduledOrganizerExport.objects.filter(
schedule_next_run__lt=now(), schedule_next_run__lt=now(),
error_counter__lt=5, error_counter__lt=5,
).select_related('organizer') ).select_for_update(skip_locked=connection.features.has_select_for_update_skip_locked).select_related('organizer')
for s in qs: for s in qs:
scheduled_organizer_export.apply_async(kwargs={ scheduled_organizer_export.apply_async(kwargs={
'organizer': s.organizer_id, 'organizer': s.organizer_id,