diff options
author | Christopher Baines <mail@cbaines.net> | 2022-11-12 11:36:19 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2022-11-12 11:42:26 +0000 |
commit | ed114265cdde01c71193f38d00e6fef8a6b1bebb (patch) | |
tree | a9f9152a240fc22f4887f63b99ad61dbf84c2456 | |
parent | b9305d81a469da0ee094f6fc87066cae5fe8f9c8 (diff) | |
download | data-service-ed114265cdde01c71193f38d00e6fef8a6b1bebb.tar data-service-ed114265cdde01c71193f38d00e6fef8a6b1bebb.tar.gz |
Handle deleting from blocked_builds when builds are scheduled
As scheduling a build might unblock others.
-rw-r--r-- | guix-data-service/model/blocked-builds.scm | 31 | ||||
-rw-r--r-- | guix-data-service/web/build-server/controller.scm | 2 |
2 files changed, 30 insertions, 3 deletions
diff --git a/guix-data-service/model/blocked-builds.scm b/guix-data-service/model/blocked-builds.scm index 708aaba..480b554 100644 --- a/guix-data-service/model/blocked-builds.scm +++ b/guix-data-service/model/blocked-builds.scm @@ -27,7 +27,7 @@ #:use-module (guix-data-service model system) #:use-module (guix-data-service model guix-revision) #:use-module (guix-data-service model build) - #:export (handle-populating-blocked-builds-for-scheduled-builds + #:export (handle-blocked-builds-entries-for-scheduled-builds handle-populating-blocked-builds-for-build-failures handle-removing-blocking-build-entries-for-successful-builds @@ -178,7 +178,7 @@ ON CONFLICT DO NOTHING") #t) -(define (handle-populating-blocked-builds-for-scheduled-builds conn build-ids) +(define (handle-blocked-builds-entries-for-scheduled-builds conn build-ids) (define (get-build-details build-id) (define query " @@ -188,6 +188,29 @@ WHERE id = $1") (exec-query conn query (list (number->string build-id)))) + (define delete-query + (string-append + " +DELETE FROM blocked_builds +WHERE EXISTS ( + SELECT 1 + FROM builds + WHERE builds.id IN (" (string-join + (map number->string build-ids) + ", ") + ") + AND EXISTS ( + SELECT 1 + FROM latest_build_status + WHERE latest_build_status.build_id = builds.id + AND latest_build_status.status = 'scheduled' + ) + AND blocked_builds.build_server_id = builds.build_server_id + AND blocked_builds.blocking_derivation_output_details_set_id + = builds.derivation_output_details_set_id +)")) + + ;; Insert entries for each build if it's blocked (for-each (lambda (build-id) (match (get-build-details build-id) @@ -207,6 +230,10 @@ WHERE id = $1") blocking-derivation-output-details-set-ids))))))) build-ids) + ;; This build being scheduled might unblock other builds, so delete the + ;; associated entries + (exec-query conn delete-query '()) + #t) (define (handle-populating-blocked-builds-for-build-failures conn build-ids) diff --git a/guix-data-service/web/build-server/controller.scm b/guix-data-service/web/build-server/controller.scm index 750fb67..a35a62f 100644 --- a/guix-data-service/web/build-server/controller.scm +++ b/guix-data-service/web/build-server/controller.scm @@ -217,7 +217,7 @@ build-ids) (spawn-fiber-for-build-handler - handle-populating-blocked-builds-for-scheduled-builds + handle-blocked-builds-entries-for-scheduled-builds '("scheduled") items build-ids) |