diff options
author | Ludovic Courtès <ludo@gnu.org> | 2018-12-21 23:31:19 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-12-21 23:50:13 +0100 |
commit | b96e05aefd7a4f734cfec3b27c2d38320d43b687 (patch) | |
tree | 76cba2ffb70f498912320c92e774ffc1da79e734 /guix/scripts | |
parent | 63b0c3eaccdf1816b419632cd7fe721934d2eb27 (diff) |
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.
Diffstat (limited to 'guix/scripts')
-rw-r--r-- | guix/scripts/offload.scm | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm index 0bedcb402f..1e0ea1c4c6 100644 --- a/guix/scripts/offload.scm +++ b/guix/scripts/offload.scm @@ -367,9 +367,19 @@ MACHINE." (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)))) |