aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/build-allocator.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-05-10 16:45:16 +0100
committerChristopher Baines <mail@cbaines.net>2020-05-10 16:45:16 +0100
commit3d7f31bf2637e1211e089ec5642f6cfe05539e90 (patch)
treee7ca1437ac0c405d72e3abbab827cebab696acb3 /guix-build-coordinator/build-allocator.scm
parent0c7643fc649ee46cbb75af325fc3f20034b75529 (diff)
downloadbuild-coordinator-3d7f31bf2637e1211e089ec5642f6cfe05539e90.tar
build-coordinator-3d7f31bf2637e1211e089ec5642f6cfe05539e90.tar.gz
Speed up part of the derivation ordered allocator
By using a bigger SQL query, rather than lots of small ones.
Diffstat (limited to 'guix-build-coordinator/build-allocator.scm')
-rw-r--r--guix-build-coordinator/build-allocator.scm36
1 files changed, 19 insertions, 17 deletions
diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm
index 990e718..70aa59c 100644
--- a/guix-build-coordinator/build-allocator.scm
+++ b/guix-build-coordinator/build-allocator.scm
@@ -20,6 +20,7 @@
(define-module (guix-build-coordinator build-allocator)
#:use-module (srfi srfi-1)
+ #:use-module (ice-9 match)
#:use-module (guix memoization)
#:use-module (guix-build-coordinator datastore)
#:use-module (guix-build-coordinator coordinator)
@@ -298,12 +299,13 @@
(mlambda (output)
(datastore-list-builds-for-output datastore output)))
- (define priority-ordered-unprocessed-builds
- (datastore-list-unprocessed-builds datastore))
-
(let* ((agents (datastore-list-agents datastore))
(setup-failures-hash
(datastore-fetch-setup-failures datastore))
+ (priority-ordered-unprocessed-builds
+ (datastore-list-unprocessed-builds datastore))
+ (input-builds-for-unprocessed-builds
+ (datastore-fetch-input-builds-for-unprocessed-builds datastore))
(derived-build-priorities-hash
;; Mapping from build_id to priority, initialised at the individual
;; priorities for the builds
@@ -363,20 +365,20 @@
(define processable-builds
(filter (lambda (build)
- (every (lambda (derivation-input-details)
- (let ((builds (cached/list-builds-for-output
- (assq-ref derivation-input-details
- 'output))))
- (if (any (lambda (output-build)
- (string=? (or (assq-ref output-build 'result)
- "unknown")
- "success"))
- builds)
- #t
- #f)))
- (datastore-find-derivation-inputs
- datastore
- (assq-ref build 'derivation-name))))
+ (let ((input-builds-by-output
+ (hash-ref input-builds-for-unprocessed-builds
+ (assq-ref build 'uuid))))
+ (and
+ input-builds-by-output
+ (every (match-lambda
+ ((output . builds)
+ (if (any (lambda (output-build)
+ (string=? (assq-ref output-build 'result)
+ "success"))
+ builds)
+ #t
+ #f)))
+ input-builds-by-output))))
priority-ordered-unprocessed-builds))
(for-each (lambda (build)