diff options
author | Christopher Baines <mail@cbaines.net> | 2020-11-02 09:07:37 +0000 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2020-11-02 09:07:37 +0000 |
commit | 6d497282ad2478d03a27894de8e8bb4074e9f741 (patch) | |
tree | db7c260093b7a8eee13cd86aaec8c70ce8bc5a43 /guix-build-coordinator | |
parent | 28eff5d2c829e9150301d71424aa5b06064c9d62 (diff) | |
download | build-coordinator-6d497282ad2478d03a27894de8e8bb4074e9f741.tar build-coordinator-6d497282ad2478d03a27894de8e8bb4074e9f741.tar.gz |
Attempt to more gracefully handle the problem of missing derivations
In the agent and allocator.
Diffstat (limited to 'guix-build-coordinator')
-rw-r--r-- | guix-build-coordinator/agent.scm | 54 | ||||
-rw-r--r-- | guix-build-coordinator/build-allocator.scm | 10 |
2 files changed, 44 insertions, 20 deletions
diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm index bb8d84b..96611fc 100644 --- a/guix-build-coordinator/agent.scm +++ b/guix-build-coordinator/agent.scm @@ -243,26 +243,40 @@ (let ((derivation (if (valid-path? store derivation-name) (read-derivation-from-file derivation-name) - (begin (retry-on-error - (lambda () - (substitute-derivation derivation-name - #:substitute-urls - derivation-substitute-urls)) - #:times 12 - #:delay 20) - (read-derivation-from-file derivation-name))))) - (match (delete-outputs derivation) - (#t - (let ((missing-inputs - (find-missing-inputs derivation (derivation-inputs derivation)))) - (if (null? missing-inputs) - '((result . success)) - `((result . failure) - (failure_reason . missing_inputs) - (missing_inputs . ,(list->vector missing-inputs)))))) - (failure - '((result . failure) - (failure_reason . could_not_delete_outputs)))))) + (and + (with-exception-handler + (lambda (exn) + (simple-format + (current-error-port) + "error: exception when reading/fetching derivation: ~A\n" + exn) + #f) + (lambda () + (retry-on-error + (lambda () + (substitute-derivation derivation-name + #:substitute-urls + derivation-substitute-urls)) + #:times 12 + #:delay 20) + #t) + #:unwind? #t) + (read-derivation-from-file derivation-name))))) + (if derivation + (match (delete-outputs derivation) + (#t + (let ((missing-inputs + (find-missing-inputs derivation (derivation-inputs derivation)))) + (if (null? missing-inputs) + '((result . success)) + `((result . failure) + (failure_reason . missing_inputs) + (missing_inputs . ,(list->vector missing-inputs)))))) + (failure + '((result . failure) + (failure_reason . could_not_delete_outputs)))) + '((result . failure) + (failure_reason . error_fetching_derivation))))) (define (perform-build store derivation-name) (set-build-options store diff --git a/guix-build-coordinator/build-allocator.scm b/guix-build-coordinator/build-allocator.scm index f4de8b7..1b7bd0b 100644 --- a/guix-build-coordinator/build-allocator.scm +++ b/guix-build-coordinator/build-allocator.scm @@ -89,6 +89,11 @@ ;; again for now. (string=? (assq-ref setup-failure 'agent-id) agent-id)) + ((string=? failure-reason "error_fetching_derivation") + ;; This problem might go away, but just don't try the same agent + ;; again for now. + (string=? (assq-ref setup-failure 'agent-id) + agent-id)) (else (error "Unknown setup failure " failure-reason))))) @@ -380,6 +385,11 @@ ;; again for now. (string=? (assq-ref setup-failure 'agent-id) agent-id)) + ((string=? failure-reason "error_fetching_derivation") + ;; This problem might go away, but just don't try the same agent + ;; again for now. + (string=? (assq-ref setup-failure 'agent-id) + agent-id)) (else (error "Unknown setup failure " failure-reason))))) |