aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/client-communication.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2022-05-15 22:35:24 +0100
committerChristopher Baines <mail@cbaines.net>2022-05-15 22:35:24 +0100
commited3c806ab83c77c1b8f04bb399c66743f1858178 (patch)
tree13ebfa10dbe693568ced24c9767e17e6a240c107 /guix-build-coordinator/client-communication.scm
parentea4a1fad3fd5daab07ff9080db9e4d808386539b (diff)
downloadbuild-coordinator-ed3c806ab83c77c1b8f04bb399c66743f1858178.tar
build-coordinator-ed3c806ab83c77c1b8f04bb399c66743f1858178.tar.gz
Avoid substituting derivations when builds are submitted
When the derivation substitute URLs are known. This avoids having to add the derivation to the store, which can be blocked by garbage collection.
Diffstat (limited to 'guix-build-coordinator/client-communication.scm')
-rw-r--r--guix-build-coordinator/client-communication.scm35
1 files changed, 20 insertions, 15 deletions
diff --git a/guix-build-coordinator/client-communication.scm b/guix-build-coordinator/client-communication.scm
index fec53e3..27f98ff 100644
--- a/guix-build-coordinator/client-communication.scm
+++ b/guix-build-coordinator/client-communication.scm
@@ -377,33 +377,38 @@
(string->number val)))
1000)))))))))
(('POST "builds")
- (let ((derivation-file (assoc-ref body "derivation")))
+ (let ((derivation-file (assoc-ref body "derivation"))
+ (substitute-urls
+ (and=> (assoc-ref body "substitute-urls")
+ vector->list)))
(unless (string? derivation-file)
(raise-exception
(make-exception-with-message
(simple-format #f "derivation must be a string: ~A\n"
derivation))))
- (let ((derivation-database-entry
- (datastore-find-derivation datastore derivation-file)))
- (unless derivation-database-entry
- (unless (with-store store
- (valid-path? store derivation-file))
- (call-with-worker-thread
- substitutes-channel
- (lambda ()
- (let ((raw-substitute-urls
- (assoc-ref body "substitute-urls")))
- (substitute-derivation derivation-file
- #:substitute-urls
- (and=> raw-substitute-urls
- vector->list))))))))
+ (define (read-drv/substitute derivation-file)
+ (unless (with-store store
+ (valid-path? store derivation-file))
+ (call-with-worker-thread
+ substitutes-channel
+ (lambda ()
+ (substitute-derivation derivation-file
+ #:substitute-urls substitute-urls)))
+ (read-derivation-from-file derivation-file)))
(let ((submit-build-result
(apply
submit-build
`(,build-coordinator
,derivation-file
+ #:read-drv
+ ,(if (null? (or substitute-urls '()))
+ read-drv/substitute
+ (lambda (derivation-file)
+ (read-derivation-through-substitutes
+ derivation-file
+ substitute-urls)))
,@(let ((priority (assoc-ref body "priority")))
(if priority
`(#:priority ,priority)