aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/build-allocator.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-12-11 09:51:30 +0000
committerChristopher Baines <mail@cbaines.net>2020-12-11 09:51:30 +0000
commitb73a604d24be553ca36963e43e7b03d2d8801357 (patch)
treed95402c1c66a9ff73548ebe21c41d9029d0ab079 /guix-build-coordinator/build-allocator.scm
parent3648bd5ca8e870703156d07442fe802eb51c9350 (diff)
downloadbuild-coordinator-b73a604d24be553ca36963e43e7b03d2d8801357.tar
build-coordinator-b73a604d24be553ca36963e43e7b03d2d8801357.tar.gz
Fix the use of a slow alist in the basic allocator
Changing this to a hash table really speeds things up.
Diffstat (limited to 'guix-build-coordinator/build-allocator.scm')
-rw-r--r--guix-build-coordinator/build-allocator.scm21
1 files changed, 12 insertions, 9 deletions
diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm
index f2db2b5..f24aa04 100644
--- a/guix-build-coordinator/build-allocator.scm
+++ b/guix-build-coordinator/build-allocator.scm
@@ -87,13 +87,16 @@
(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))
+ (let ((table (make-hash-table builds-count)))
+ (for-each (lambda (build)
+ (let ((build-id (assq-ref build 'uuid)))
+ (hash-set! table
+ build-id
+ (datastore-find-build-derivation-system
+ datastore
+ build-id))))
+ builds)
+ table))
(define (filter-builds-for-agent agent-id)
(define requested-systems
@@ -126,8 +129,8 @@
(log "build:" (assq-ref build 'uuid))
(and
(or (null? requested-systems)
- (let ((build-system (assoc-ref systems-for-builds
- (assq-ref build 'uuid))))
+ (let ((build-system (hash-ref systems-for-builds
+ (assq-ref build 'uuid))))
(member build-system requested-systems)))
(let* ((build-id (assq-ref build 'uuid))
(setup-failures-for-build