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:
parent
35cebf0166
commit
a76611c435
|
@ -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"))))
|
||||||
|
|
Loading…
Reference in New Issue