aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/jobs/load-new-guix-revision.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2019-07-16 18:20:02 +0100
committerChristopher Baines <mail@cbaines.net>2019-07-16 18:20:02 +0100
commit413ef9ea6eb867c93abbaa26ade7f00232e289c9 (patch)
tree35d683cc107eb51f8937f18848100c75c474706c /guix-data-service/jobs/load-new-guix-revision.scm
parent6904547bf2dc9dae516af3911b1dd967ae7d47a6 (diff)
downloaddata-service-413ef9ea6eb867c93abbaa26ade7f00232e289c9.tar
data-service-413ef9ea6eb867c93abbaa26ade7f00232e289c9.tar.gz
Prioritise processing the latest revisions for branches
Reserve some capacity to process revisions which are the tip of a branch. This should reduce the time between new revisions appearing, and then being processed.
Diffstat (limited to 'guix-data-service/jobs/load-new-guix-revision.scm')
-rw-r--r--guix-data-service/jobs/load-new-guix-revision.scm31
1 files changed, 25 insertions, 6 deletions
diff --git a/guix-data-service/jobs/load-new-guix-revision.scm b/guix-data-service/jobs/load-new-guix-revision.scm
index 24fada7..4779d9a 100644
--- a/guix-data-service/jobs/load-new-guix-revision.scm
+++ b/guix-data-service/jobs/load-new-guix-revision.scm
@@ -719,10 +719,21 @@ ORDER BY load_new_guix_revision_jobs.id DESC")
(list id)))
(define (fetch-unlocked-jobs conn)
- (exec-query
- conn
- "
-SELECT id FROM load_new_guix_revision_jobs
+ (define query "
+SELECT
+ id,
+ commit IN (
+ SELECT commit FROM (
+ SELECT DISTINCT ON (name)
+ name, git_branches.commit
+ FROM git_branches
+ WHERE
+ git_branches.git_repository_id = load_new_guix_revision_jobs.git_repository_id AND
+ git_branches.commit IS NOT NULL
+ ORDER BY name, datetime DESC
+ ) branches_and_latest_commits
+ ) AS latest_branch_commit
+FROM load_new_guix_revision_jobs
WHERE
succeeded_at IS NULL AND
NOT EXISTS (
@@ -731,8 +742,16 @@ WHERE
-- Skip jobs that have failed, to avoid trying them over and over again
WHERE job_id = load_new_guix_revision_jobs.id AND event = 'failure'
)
-ORDER BY id DESC
-FOR NO KEY UPDATE SKIP LOCKED"))
+ORDER BY latest_branch_commit DESC, id DESC
+FOR NO KEY UPDATE OF load_new_guix_revision_jobs
+SKIP LOCKED")
+
+ (map
+ (match-lambda
+ ((id priority)
+ (list id
+ (string=? priority "t"))))
+ (exec-query conn query)))
(define (process-load-new-guix-revision-job id)
(with-postgresql-connection