diff options
author | Christopher Baines <mail@cbaines.net> | 2020-06-19 16:55:01 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-06-19 16:55:01 +0100 |
commit | 89c2823f1a332da9e9ea3a4f84ef27cce7e22a3a (patch) | |
tree | c58d0c732100c67e71fee2e5438154153c374fc7 /guix-build-coordinator | |
parent | d1d8132c6f8c0fb4d2335472d487635e0284cdf6 (diff) | |
download | build-coordinator-89c2823f1a332da9e9ea3a4f84ef27cce7e22a3a.tar build-coordinator-89c2823f1a332da9e9ea3a4f84ef27cce7e22a3a.tar.gz |
Handle the system more explicitly when fetching builds
Also support fetching builds for specific systems from the Guix Data Service.
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r-- | guix-build-coordinator/agent-messaging/http.scm | 9 | ||||
-rw-r--r-- | guix-build-coordinator/agent.scm | 2 | ||||
-rw-r--r-- | guix-build-coordinator/coordinator.scm | 3 | ||||
-rw-r--r-- | guix-build-coordinator/datastore/sqlite.scm | 14 |
4 files changed, 22 insertions, 6 deletions
diff --git a/guix-build-coordinator/agent-messaging/http.scm b/guix-build-coordinator/agent-messaging/http.scm index e7c17aa..f7459ad 100644 --- a/guix-build-coordinator/agent-messaging/http.scm +++ b/guix-build-coordinator/agent-messaging/http.scm @@ -292,7 +292,10 @@ port. Also, the port used can be changed by passing the --port option.\n" (if (authenticated? uuid request) (let* ((json-body (json-string->scm (utf8->string body))) (count (assoc-ref json-body "count")) - (builds (fetch-builds build-coordinator uuid count))) + (systems (assoc-ref json-body "systems")) + (builds (fetch-builds build-coordinator uuid + (vector->list systems) + count))) (render-json `((builds . ,(list->vector builds))))) (render-json @@ -696,11 +699,13 @@ port. Also, the port used can be changed by passing the --port option.\n" #:succeed-on-access-denied-retry? #t)) (define* (fetch-builds-for-agent coordinator-uri agent-uuid password + systems #:key (count 1)) (vector->list (assoc-ref (coordinator-http-request coordinator-uri agent-uuid password (string-append "/agent/" agent-uuid "/fetch-builds") - #:body `((count . ,count)) + #:body `((count . ,count) + (systems . ,(list->vector systems))) #:method 'POST) "builds"))) diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm index 06518ed..a5a3f7a 100644 --- a/guix-build-coordinator/agent.scm +++ b/guix-build-coordinator/agent.scm @@ -36,12 +36,14 @@ #:export (run-agent)) (define (run-agent uuid coordinator-uri password + systems max-parallel-builds derivation-substitute-urls non-derivation-substitute-urls) (define (fetch-new-jobs count) (let ((received-builds (fetch-builds-for-agent coordinator-uri uuid password + systems #:count count))) (simple-format #t "requested ~A builds, received ~A\n" count (length received-builds)) diff --git a/guix-build-coordinator/coordinator.scm b/guix-build-coordinator/coordinator.scm index 83f1e68..f76c783 100644 --- a/guix-build-coordinator/coordinator.scm +++ b/guix-build-coordinator/coordinator.scm @@ -321,7 +321,7 @@ #t) -(define (fetch-builds build-coordinator agent count) +(define (fetch-builds build-coordinator agent systems count) (call-with-duration-metric (build-coordinator-metrics-registry build-coordinator) "guixbuildcoordinator_coordinator_fetch_builds_duration_seconds" @@ -329,6 +329,7 @@ (datastore-allocate-builds-to-agent (build-coordinator-datastore build-coordinator) agent + systems count)))) (define (agent-details datastore agent-id) 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) |