From 48e9f8372b9d616a73b6651ba7f98fd42320e22c Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Sat, 26 Nov 2022 21:09:07 +0100 Subject: [PATCH] Prioritize tasks that have never run at all --- .../postgresql/queries/get-task-stream.js | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/database-backends/postgresql/queries/get-task-stream.js b/src/database-backends/postgresql/queries/get-task-stream.js index 9eca1fa..5295cfa 100644 --- a/src/database-backends/postgresql/queries/get-task-stream.js +++ b/src/database-backends/postgresql/queries/get-task-stream.js @@ -60,29 +60,34 @@ function makeFillQuery(withDependencies) { SELECT item_id FROM tag_candidates ` } + ), + tasks AS NOT MATERIALIZED ( + SELECT + item_id, + is_successful, + ( + results.is_successful = FALSE + OR ( + results.is_successful = TRUE + AND results.is_invalidated = FALSE + AND ( + results.expires_at > NOW() + OR results.expires_at IS NULL + ) + ) + ) AS is_completed + FROM srap_task_results AS results + WHERE + results.task = :task + AND results.task_version = :taskVersion ) SELECT :task AS task, - item_id + full_candidates.item_id FROM full_candidates - WHERE NOT EXISTS ( - SELECT item_id FROM srap_task_results AS results - WHERE - item_id = full_candidates.item_id - AND results.task = :task - AND results.task_version = :taskVersion - AND ( - results.is_successful = FALSE - OR ( - results.is_successful = TRUE - AND results.is_invalidated = FALSE - AND ( - results.expires_at > NOW() - OR results.expires_at IS NULL - ) - ) - ) - ) + LEFT JOIN tasks ON full_candidates.item_id = tasks.item_id + WHERE tasks.is_completed IS NOT TRUE + ORDER BY tasks.is_successful NULLS FIRST `; }