offload: Do not try to retrieve anything upon build failure.

* guix/scripts/offload.scm (offload): Add 'log-port' keyword parameter.
  Handle log display here.  Return the result of (close-pipe pipe).
  (process-request): Adjust 'offload' call site accordingly.  Call
  'retrieve-files' only when 'offload' returns zero; exit when 'offload'
  returns non-zero.
This commit is contained in:
Ludovic Courtès 2014-01-27 21:32:59 +01:00
parent 35cebf0166
commit a76611c435
1 changed files with 28 additions and 17 deletions

View File

@ -170,9 +170,9 @@ running lsh gateway upon success, or #f on failure."
(define* (offload drv machine (define* (offload drv machine
#:key print-build-trace? (max-silent-time 3600) #:key print-build-trace? (max-silent-time 3600)
(build-timeout 7200)) (build-timeout 7200) (log-port (current-output-port)))
"Perform DRV on MACHINE, assuming DRV and its prerequisites are available "Perform DRV on MACHINE, assuming DRV and its prerequisites are available
there. Return a read pipe from where to read the build log." there, and write the build log to LOG-PORT. Return the exit status."
(format (current-error-port) "offloading '~a' to '~a'...~%" (format (current-error-port) "offloading '~a' to '~a'...~%"
(derivation-file-name drv) (build-machine-name machine)) (derivation-file-name drv) (build-machine-name machine))
(format (current-error-port) "@ build-remote ~a ~a~%" (format (current-error-port) "@ build-remote ~a ~a~%"
@ -185,7 +185,13 @@ there. Return a read pipe from where to read the build log."
,(format #f "--max-silent-time=~a" ,(format #f "--max-silent-time=~a"
max-silent-time) max-silent-time)
,(derivation-file-name drv))))) ,(derivation-file-name drv)))))
pipe)) (let loop ((line (read-line pipe)))
(unless (eof-object? line)
(display line log-port)
(newline log-port)
(loop (read-line pipe))))
(close-pipe pipe)))
(define (send-files files machine) (define (send-files files machine)
"Send the subset of FILES that's missing to MACHINE's store. Return #t on "Send the subset of FILES that's missing to MACHINE's store. Return #t on
@ -291,20 +297,25 @@ success, #f otherwise."
(outputs (string-tokenize (read-line)))) (outputs (string-tokenize (read-line))))
(when (send-files (cons (derivation-file-name drv) inputs) (when (send-files (cons (derivation-file-name drv) inputs)
machine) machine)
(let ((log (offload drv machine (let ((status (offload drv machine
#:print-build-trace? print-build-trace? #:print-build-trace? print-build-trace?
#:max-silent-time max-silent-time #:max-silent-time max-silent-time
#:build-timeout build-timeout))) #:build-timeout build-timeout)))
(let loop ((line (read-line log))) (kill pid SIGTERM)
(if (eof-object? line) (if (zero? status)
(close-pipe log) (begin
(begin (retrieve-files outputs machine)
(display line) (newline) (format (current-error-port)
(loop (read-line log)))))) "done with offloaded '~a'~%"
(retrieve-files outputs machine))) (derivation-file-name drv)))
(format (current-error-port) "done with offloaded '~a'~%" (begin
(derivation-file-name drv)) (format (current-error-port)
(kill pid SIGTERM)) "derivation '~a' offloaded to '~a' failed \
with exit code ~a~%"
(derivation-file-name drv)
(build-machine-name machine)
(status:exit-val status))
(primitive-exit (status:exit-val status))))))))
(#f (#f
(display "# decline\n"))) (display "# decline\n")))
(display "# decline\n")))) (display "# decline\n"))))