diff options
Diffstat (limited to 'guix-build-coordinator/datastore')
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/guix-build-coordinator/datastore/sqlite.scm b/guix-build-coordinator/datastore/sqlite.scm index 2b39c51..0497bab 100644 --- a/guix-build-coordinator/datastore/sqlite.scm +++ b/guix-build-coordinator/datastore/sqlite.scm @@ -1286,20 +1286,24 @@ SELECT agent_id, COUNT(*) FROM allocated_builds GROUP BY agent_id"))) (define-method (datastore-allocate-builds-to-agent (datastore <sqlite-datastore>) agent-id + systems count) (define (fetch-build db) (let ((statement (sqlite-prepare db ;; This needs to guard against the plan being out of date - " + (simple-format #f " SELECT builds.uuid, builds.derivation_name FROM builds INNER JOIN build_allocation_plan ON builds.uuid = build_allocation_plan.build_id +INNER JOIN derivations + ON builds.derivation_name = derivations.name WHERE build_allocation_plan.agent_id = :agent_id AND builds.processed = 0 AND builds.uuid NOT IN (SELECT build_id FROM allocated_builds) + AND derivations.system IN (~A) AND NOT EXISTS ( SELECT 1 FROM derivation_outputs AS build_derivation_outputs @@ -1315,8 +1319,12 @@ WHERE build_allocation_plan.agent_id = :agent_id allocated_builds_derivation_outputs.output ) ORDER BY build_allocation_plan.ordering ASC -LIMIT 1"))) - +LIMIT 1" + (string-join + (map (lambda (system) + (string-append "'" system "'")) + systems) + ","))))) (sqlite-bind-arguments statement #:agent_id agent-id) |