From 244cdb22b0ecd28a7720940174dc3f8b0df7a2a0 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Wed, 7 May 2025 15:47:53 +0200 Subject: [PATCH] Distribute queue over events --- src/pretix/base/datasync/datasync.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pretix/base/datasync/datasync.py b/src/pretix/base/datasync/datasync.py index 645fa0b636..a6ec47fc29 100644 --- a/src/pretix/base/datasync/datasync.py +++ b/src/pretix/base/datasync/datasync.py @@ -28,7 +28,8 @@ from functools import cached_property from itertools import groupby import sentry_sdk -from django.db.models import Q +from django.db.models import F, Window +from django.db.models.functions import RowNumber from django.dispatch import receiver from django.utils.timezone import now from django_scopes import scope, scopes_disabled @@ -64,9 +65,15 @@ def sync_all(): with scopes_disabled(): queue = ( OrderSyncQueue.objects + .filter(not_before__lt=now()) + .order_by(Window( + expression=RowNumber(), + partition_by=[F("event_id")], + order_by="not_before", + )) .select_related("order") - .prefetch_related("order__event") - .filter(Q(not_before__isnull=True) | Q(not_before__lt=now()))[:1000] + .prefetch_related("event") + [:1000] ) grouped = groupby(sorted(queue, key=lambda q: (q.sync_provider, q.order.event.pk)), lambda q: (q.sync_provider, q.order.event)) for (target, event), queued_orders in grouped: