~ruther/guix-local

b1fea30339f071e8751039fd0e6ef2aa3e6f44fb — Ludovic Courtès 11 years ago 4359378
offload: Try another machine when the "best" machine is overloaded.

* guix/scripts/offload.scm (choose-build-machine): When BEST is
  overloaded, try the other machines.
1 files changed, 14 insertions(+), 11 deletions(-)

M guix/scripts/offload.scm
M guix/scripts/offload.scm => guix/scripts/offload.scm +14 -11
@@ 610,22 610,25 @@ allowed on MACHINE."
                  (list machine1 slot1)
                  (list machine2 slot2))))))))

    (let ((machines+slots (sort machines+slots
                                (undecorate machine-less-loaded-or-faster?))))
    (let loop ((machines+slots
                (sort machines+slots
                      (undecorate machine-less-loaded-or-faster?))))
      (match machines+slots
        (((best slot) (others slots) ...)
         ;; Release slots from the uninteresting machines.
         (for-each release-build-slot slots)

        (((best slot) others ...)
         ;; Return the best machine unless it's already overloaded.
         (if (< (machine-load best) 2.)
             (match others
               (((machines slots) ...)
                ;; Release slots from the uninteresting machines.
                (for-each release-build-slot slots)

                ;; Prevent SLOT from being GC'd.
                (set! %slots (cons slot %slots))
                best))
             (begin
               ;; Prevent SLOT from being GC'd.
               (set! %slots (cons slot %slots))
               best)
             (begin
               ;; BEST is overloaded, so try the next one.
               (release-build-slot slot)
               #f)))
               (loop others))))
        (() #f)))))

(define* (process-request wants-local? system drv features