offload: Recognize build failures due to lack of disk space.

Previously, if a remote build would fail due to lack of disk space, this
would be considered a permanent failure and thus cached as a build
failure if the local daemon runs with '--cache-failures'.

* guix/scripts/offload.scm (transfer-and-offload): Upon
'nix-protocol-error?' call 'node-free-disk-space' and return 1 instead
of 100 if the result if lower than 10 MiB.
This commit is contained in:
Ludovic Courtès 2018-12-21 23:31:19 +01:00
parent 63b0c3eacc
commit b96e05aefd
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -367,9 +367,19 @@ (define store
(derivation-file-name drv)
(build-machine-name machine)
(nix-protocol-error-message c))
;; Use exit code 100 for a permanent build failure. The daemon
;; interprets other non-zero codes as transient build failures.
(primitive-exit 100)))
(let* ((space (false-if-exception
(node-free-disk-space (make-node session)))))
;; Use exit code 100 for a permanent build failure. The daemon
;; interprets other non-zero codes as transient build failures.
(if (and space (< space (* 10 (expt 2 20))))
(begin
(format (current-error-port)
(G_ "build failure may have been caused by lack \
of free disk space on '~a'~%")
(build-machine-name machine))
(primitive-exit 1))
(primitive-exit 100)))))
(parameterize ((current-build-output-port (build-log-port)))
(build-derivations store (list drv))))