Skip to content

Commit cf09293

Browse files
committed
feat: process both ends of queue
1 parent df8c837 commit cf09293

1 file changed

Lines changed: 25 additions & 4 deletions

File tree

ApplicationData/Services/LinkProvider.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,31 @@ [EnumeratorCancellation] CancellationToken cancellationToken
230230
{
231231
await using var connection = _dbConnectionFactory.CreateReadOnlyConnection();
232232
var reader = await connection.Query<(int QueuedItemId, DateTime QueuedAt, string RedditPostId)>(
233-
@"SELECT queued_item_id, queued_at, reddit_post_id
234-
FROM link_queue
235-
WHERE processed_at IS NULL
236-
ORDER BY queued_at ASC");
233+
@"WITH Oldest AS (
234+
SELECT queued_item_id, queued_at, reddit_post_id,
235+
ROW_NUMBER() OVER (ORDER BY queued_at ASC) AS rn
236+
FROM link_queue
237+
WHERE processed_at IS NULL
238+
ORDER BY queued_at ASC
239+
),
240+
Newest AS (
241+
SELECT queued_item_id, queued_at, reddit_post_id,
242+
ROW_NUMBER() OVER (ORDER BY queued_at DESC) AS rn
243+
FROM link_queue
244+
WHERE processed_at IS NULL
245+
ORDER BY queued_at DESC
246+
)
247+
SELECT queued_item_id, queued_at, reddit_post_id
248+
FROM (
249+
SELECT queued_item_id, queued_at, reddit_post_id, rn
250+
FROM Oldest
251+
UNION ALL
252+
SELECT queued_item_id, queued_at, reddit_post_id, rn
253+
FROM Newest
254+
)
255+
ORDER BY rn, CASE WHEN rn % 2 = 1 THEN 1 ELSE 2 END;
256+
257+
", cancellationToken: cancellationToken);
237258

238259
foreach (var (queuedItemId, queuedAt, redditPostId) in reader)
239260
yield return (QueuedItemId: queuedItemId, QueuedAt: queuedAt, RedditPostId: redditPostId);

0 commit comments

Comments
 (0)