From 8a5aa65d74eb476f19f4503eab0d76538f68760a Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Fri, 27 May 2016 14:41:44 -0400 Subject: [PATCH] data.queue: limiting before order by rand --- data/queue.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/data/queue.py b/data/queue.py index 3f4a30f50..2a0359a58 100644 --- a/data/queue.py +++ b/data/queue.py @@ -155,12 +155,11 @@ class WorkQueue(object): avail = self._available_jobs_not_running(now, name_match_query, running) db_item = avail.order_by(QueueItem.id).get() else: - # If we don't require ordering, we can forego this whole subquery and - # instead try and grab any available item. We ORDER BY randomly in order - # to prevent races. - db_item = (self - ._available_jobs(now, name_match_query) - .limit(50) + # If we don't require ordering, we grab a random item from any of the first 50 available. + subquery = self._available_jobs(now, name_match_query).limit(50).alias('j1') + db_item = (QueueItem + .select() + .join(subquery, on=QueueItem.id == subquery.c.id) .order_by(db_random_func()) .get())