aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/datastore/sqlite.scm
diff options
context:
space:
mode:
Diffstat (limited to 'guix-build-coordinator/datastore/sqlite.scm')
-rw-r--r--guix-build-coordinator/datastore/sqlite.scm14
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)