summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-01-28 14:43:32 +0100
committerLudovic Courtès <ludo@gnu.org>2018-01-29 18:06:47 +0100
commit5e959dd8f2bd9119758ff0fd056965bf2c6a6b21 (patch)
treefb15d2f7dc6c5c03d435649efa79db3d488f9c55 /src
parent1e539e10cc1040b76b1280f76454517a35a5d668 (diff)
downloadcuirass-5e959dd8f2bd9119758ff0fd056965bf2c6a6b21.tar
cuirass-5e959dd8f2bd9119758ff0fd056965bf2c6a6b21.tar.gz
base: 'spawn-builds' shuffles jobs.
* src/cuirass/base.scm (shuffle-jobs): New procedure. (spawn-builds): Use it.
Diffstat (limited to 'src')
-rw-r--r--src/cuirass/base.scm14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm
index 8fed366..7f02633 100644
--- a/src/cuirass/base.scm
+++ b/src/cuirass/base.scm
@@ -286,6 +286,16 @@ and so on. "
;;; Building packages.
;;;
+(define (shuffle-jobs jobs)
+ "Shuffle JOBS, a list of job alists."
+ ;; Our shuffling algorithm is simple: we sort by .drv file name. :-)
+ (define (job<? job1 job2)
+ (let ((drv1 (assq-ref job1 #:derivation))
+ (drv2 (assq-ref job2 #:derivation)))
+ (string<? drv1 drv2)))
+
+ (sort jobs job<?))
+
(define* (spawn-builds store db jobs
#:key (max-batch-size 200))
"Build the derivations associated with JOBS, a list of job alists, updating
@@ -316,7 +326,9 @@ MAX-BATCH-SIZE items."
(build-event-output-port (lambda (event status)
(handle-build-event db event))
#t)))
- (let loop ((jobs jobs)
+ ;; Shuffle jobs so that we don't build sequentially i686/x86_64/aarch64,
+ ;; master/core-updates, etc., which would be suboptimal.
+ (let loop ((jobs (shuffle-jobs jobs))
(count total))
(if (zero? count)
(log-message "done with ~a derivations" total)