mirror of
https://github.com/pretix/pretix.git
synced 2026-05-17 17:14:04 +00:00
Distribute queue over events
This commit is contained in:
@@ -28,7 +28,8 @@ from functools import cached_property
|
|||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
|
|
||||||
import sentry_sdk
|
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.dispatch import receiver
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django_scopes import scope, scopes_disabled
|
from django_scopes import scope, scopes_disabled
|
||||||
@@ -64,9 +65,15 @@ def sync_all():
|
|||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
queue = (
|
queue = (
|
||||||
OrderSyncQueue.objects
|
OrderSyncQueue.objects
|
||||||
|
.filter(not_before__lt=now())
|
||||||
|
.order_by(Window(
|
||||||
|
expression=RowNumber(),
|
||||||
|
partition_by=[F("event_id")],
|
||||||
|
order_by="not_before",
|
||||||
|
))
|
||||||
.select_related("order")
|
.select_related("order")
|
||||||
.prefetch_related("order__event")
|
.prefetch_related("event")
|
||||||
.filter(Q(not_before__isnull=True) | Q(not_before__lt=now()))[:1000]
|
[:1000]
|
||||||
)
|
)
|
||||||
grouped = groupby(sorted(queue, key=lambda q: (q.sync_provider, q.order.event.pk)), lambda q: (q.sync_provider, q.order.event))
|
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:
|
for (target, event), queued_orders in grouped:
|
||||||
|
|||||||
Reference in New Issue
Block a user