diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-01-28 14:43:32 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-01-29 18:06:47 +0100 |
commit | 5e959dd8f2bd9119758ff0fd056965bf2c6a6b21 (patch) | |
tree | fb15d2f7dc6c5c03d435649efa79db3d488f9c55 | |
parent | 1e539e10cc1040b76b1280f76454517a35a5d668 (diff) | |
download | cuirass-5e959dd8f2bd9119758ff0fd056965bf2c6a6b21.tar cuirass-5e959dd8f2bd9119758ff0fd056965bf2c6a6b21.tar.gz |
base: 'spawn-builds' shuffles jobs.
* src/cuirass/base.scm (shuffle-jobs): New procedure.
(spawn-builds): Use it.
-rw-r--r-- | src/cuirass/base.scm | 14 |
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) |