bvandeusen
77f7a23410
feat(scheduler): order due sources by last_checked_at — most overdue first
...
select_due_sources returned rows in undefined order (Postgres-determined,
typically PK). At tick rates that outpace download-queue throughput, a
freshly-rerun source could keep getting re-queued ahead of one that's
still waiting for its first attempt this cycle. Operator-flagged
2026-05-30:
> if there are 8 hours before a source is due again and 40 full time
> downloads can happen in that period that means that there's a chance
> the first one to fire gets back into the download queue before item 41
> has a chance to get downloaded.
Added `ORDER BY last_checked_at ASC NULLS FIRST, id` to the due-source
SELECT. Never-checked sources go first, then longest-since-checked, then
ties broken by id. Combined with Celery's FIFO `download` queue, the
oldest-overdue source in each tick now reaches a worker before any
fresher one.
Test pins the ordering: a NULL-last_checked source, a 4-hour-overdue
source, and a 2-min-overdue source come back in that exact order from
select_due_sources.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-30 12:08:43 -04:00
..
2026-05-14 07:32:17 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-30 00:59:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 21:12:18 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 11:33:05 -04:00
2026-05-30 11:25:36 -04:00
2026-05-28 11:33:05 -04:00
2026-05-30 11:25:36 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 11:33:05 -04:00
2026-05-28 12:43:08 -04:00
2026-05-28 11:33:05 -04:00
2026-05-19 11:11:37 -04:00
2026-05-21 22:14:15 -04:00
2026-05-20 12:54:47 -04:00
2026-05-18 21:47:45 -04:00
2026-05-19 11:11:07 -04:00
2026-05-26 01:18:38 -04:00
2026-05-26 01:18:07 -04:00
2026-05-19 14:59:04 -04:00
2026-05-26 10:36:21 -04:00
2026-05-24 23:37:06 -04:00
2026-05-16 18:02:01 -04:00
2026-05-14 07:34:47 -04:00
2026-05-21 16:02:36 -04:00
2026-05-26 08:13:53 -04:00
2026-05-25 01:28:54 -04:00
2026-05-20 18:46:59 -04:00
2026-05-27 19:12:51 -04:00
2026-05-25 11:12:55 -04:00
2026-05-21 16:00:40 -04:00
2026-05-20 21:20:30 -04:00
2026-05-28 12:43:08 -04:00
2026-05-15 13:53:42 -04:00
2026-05-29 15:34:20 -04:00
2026-05-20 20:39:17 -04:00
2026-05-28 11:33:05 -04:00
2026-05-20 20:41:42 -04:00
2026-05-28 11:33:05 -04:00
2026-05-25 12:30:18 -04:00
2026-05-28 11:33:05 -04:00
2026-05-18 18:05:45 -04:00
2026-05-19 11:14:49 -04:00
2026-05-19 11:22:17 -04:00
2026-05-18 21:33:55 -04:00
2026-05-20 22:01:26 -04:00
2026-05-25 20:33:44 -04:00
2026-05-25 22:16:26 -04:00
2026-05-26 14:39:57 -04:00
2026-05-26 14:19:29 -04:00
2026-05-25 02:34:36 -04:00
2026-05-29 21:40:52 -04:00
2026-05-26 21:23:12 -04:00
2026-05-15 07:35:22 -04:00
2026-05-15 15:48:29 -04:00
2026-05-18 09:38:43 -04:00
2026-05-18 21:33:11 -04:00
2026-05-19 11:10:53 -04:00
2026-05-20 12:53:34 -04:00
2026-05-20 18:32:52 -04:00
2026-05-20 18:33:14 -04:00
2026-05-20 20:36:19 -04:00
2026-05-15 07:37:13 -04:00
2026-05-15 07:39:33 -04:00
2026-05-18 21:36:43 -04:00
2026-05-15 07:37:53 -04:00
2026-05-15 07:36:17 -04:00
2026-05-15 07:38:33 -04:00
2026-05-25 02:25:30 -04:00
2026-05-14 07:34:29 -04:00
2026-05-14 14:24:25 -04:00
2026-05-20 20:39:50 -04:00
2026-05-25 22:16:26 -04:00
2026-05-17 22:18:07 -04:00
2026-05-20 18:34:02 -04:00
2026-05-21 18:54:49 -04:00
2026-05-19 11:22:17 -04:00
2026-05-28 00:01:32 -04:00
2026-05-25 22:16:26 -04:00
2026-05-19 11:14:49 -04:00
2026-05-30 12:08:43 -04:00
2026-05-16 23:33:12 -04:00
2026-05-17 16:28:20 -04:00
2026-05-15 15:49:25 -04:00
2026-05-18 15:13:48 -04:00
2026-05-27 15:35:25 -04:00
2026-05-14 12:04:05 -04:00
2026-05-20 18:37:17 -04:00
2026-05-28 12:43:08 -04:00
2026-05-15 15:50:41 -04:00
2026-05-16 23:36:04 -04:00
2026-05-26 21:00:12 -04:00
2026-05-15 07:39:33 -04:00
2026-05-14 15:23:07 -04:00
2026-05-24 21:22:42 -04:00
2026-05-25 01:28:54 -04:00
2026-05-24 23:37:06 -04:00
2026-05-26 01:32:50 -04:00
2026-05-15 07:43:39 -04:00
2026-05-27 22:45:11 -04:00
2026-05-21 18:53:35 -04:00
2026-05-14 12:05:19 -04:00
2026-05-21 16:01:59 -04:00
2026-05-19 18:15:59 -04:00