aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-11-13 21:24:12 +0000
committerChristopher Baines <mail@cbaines.net>2020-11-13 21:24:12 +0000
commite091f673fc3a2ff7dd814e436e78af31a7051ec3 (patch)
treea3aa69002e4eb9c759938c3f0d53ee4804761737
parent4f225a13bd8be43b6e4b41338d01410f3076b51f (diff)
downloadbuild-coordinator-e091f673fc3a2ff7dd814e436e78af31a7051ec3.tar
build-coordinator-e091f673fc3a2ff7dd814e436e78af31a7051ec3.tar.gz
Handle agent requested systems in the basic allocation strategy
Previously, the derivation system was ignored, but this now takes it in to account. The implementation is copied from the derivation ordered allocator.
-rw-r--r--guix-build-coordinator/build-allocator.scm49
1 files changed, 38 insertions, 11 deletions
diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm
index 8e7dcd8..e89c719 100644
--- a/guix-build-coordinator/build-allocator.scm
+++ b/guix-build-coordinator/build-allocator.scm
@@ -55,6 +55,14 @@
(datastore-list-builds-for-output datastore output)))
(let* ((agents (datastore-list-agents datastore))
+ (requested-systems-by-agent
+ (map (lambda (agent-details)
+ (let ((agent-id (assq-ref agent-details 'uuid)))
+ (cons agent-id
+ (datastore-agent-requested-systems
+ datastore
+ agent-id))))
+ agents))
(builds (datastore-list-unprocessed-builds datastore))
(setup-failures-hash
(datastore-fetch-setup-failures datastore))
@@ -74,7 +82,21 @@
(build-ordering-hints-hash
(make-hash-table)))
+ (define systems-for-builds
+ ;; TODO Should be one query
+ (map (lambda (build)
+ (let ((build-id (assq-ref build 'uuid)))
+ (cons build-id
+ (datastore-find-build-derivation-system
+ datastore
+ build-id))))
+ builds))
+
(define (filter-builds-for-agent agent-id)
+ (define requested-systems
+ (assoc-ref requested-systems-by-agent
+ agent-id))
+
(define (relevant-setup-failure? setup-failure)
(log "setup failure:" setup-failure)
(let ((failure-reason
@@ -99,17 +121,22 @@
(lambda (build)
(log "build:" (assq-ref build 'uuid))
- (let* ((build-id (assq-ref build 'uuid))
- (setup-failures-for-build
- (or (hash-ref setup-failures-hash build-id)
- '()))
- (relevant-setup-failures
- (filter relevant-setup-failure?
- setup-failures-for-build)))
- (log "relevant setup failures:" relevant-setup-failures)
- (if (null? relevant-setup-failures)
- #t
- #f))))
+ (and
+ (or (null? requested-systems)
+ (let ((build-system (assoc-ref systems-for-builds
+ (assq-ref build 'uuid))))
+ (member build-system requested-systems)))
+ (let* ((build-id (assq-ref build 'uuid))
+ (setup-failures-for-build
+ (or (hash-ref setup-failures-hash build-id)
+ '()))
+ (relevant-setup-failures
+ (filter relevant-setup-failure?
+ setup-failures-for-build)))
+ (log "relevant setup failures:" relevant-setup-failures)
+ (if (null? relevant-setup-failures)
+ #t
+ #f)))))
(define (build-sorting-function-for-agent agent-id)
(lambda (a b)