~ruther/guix-local

34797d8afc3c5f1211a4baf1161de640fc630a2e — Ludovic Courtès 8 years ago d1f01e4
hydra: Invalidate derivation caches after each architecture evaluation.

This reduces max RSS from 1.3G to 1.0G.

* guix/derivations.scm (invalidate-derivation-caches!): New procedure.
* build-aux/hydra/gnu-system.scm (hydra-jobs): Use it.  Add 'format'
call.
2 files changed, 17 insertions(+), 0 deletions(-)

M build-aux/hydra/gnu-system.scm
M guix/derivations.scm
M build-aux/hydra/gnu-system.scm => build-aux/hydra/gnu-system.scm +7 -0
@@ 334,6 334,13 @@ valid."
  (parameterize ((%graft? #f))
    ;; Return one job for each package, except bootstrap packages.
    (append-map (lambda (system)
                  (format (current-error-port)
                          "evaluating for '~a' (heap size: ~a MiB)...~%"
                          system
                          (round
                           (/ (assoc-ref (gc-stats) 'heap-size)
                              (expt 2. 20))))
                  (invalidate-derivation-caches!)
                  (case subset
                    ((all)
                     ;; Build everything, including replacements.

M guix/derivations.scm => guix/derivations.scm +10 -0
@@ 90,6 90,7 @@
            derivation-path->output-paths
            derivation
            raw-derivation
            invalidate-derivation-caches!

            map-derivation



@@ 841,6 842,15 @@ output should not be used."
      (hash-set! %derivation-cache file drv*)
      drv*)))

(define (invalidate-derivation-caches!)
  "Invalidate internal derivation caches.  This is mostly useful for
long-running processes that know what they're doing.  Use with care!"
  ;; Typically this is meant to be used by Cuirass and Hydra, which can clear
  ;; caches when they start evaluating packages for another architecture.
  (invalidate-memoization! derivation->bytevector)
  (invalidate-memoization! derivation-path->base16-hash)
  (hash-clear! %derivation-cache))

(define* (map-derivation store drv mapping
                         #:key (system (%current-system)))
  "Given MAPPING, a list of pairs of derivations, return a derivation based on