aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2020-11-02 09:07:37 +0000
committerChristopher Baines <mail@cbaines.net>2020-11-02 09:07:37 +0000
commit6d497282ad2478d03a27894de8e8bb4074e9f741 (patch)
treedb7c260093b7a8eee13cd86aaec8c70ce8bc5a43 /guix-build-coordinator
parent28eff5d2c829e9150301d71424aa5b06064c9d62 (diff)
downloadbuild-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.scm54
-rw-r--r--guix-build-coordinator/build-allocator.scm10
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)))))