aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--guix-build-coordinator/agent.scm2
-rw-r--r--guix-build-coordinator/utils.scm16
2 files changed, 17 insertions, 1 deletions
diff --git a/guix-build-coordinator/agent.scm b/guix-build-coordinator/agent.scm
index c5aeeb9..77e0c73 100644
--- a/guix-build-coordinator/agent.scm
+++ b/guix-build-coordinator/agent.scm
@@ -677,6 +677,8 @@ but the guix-daemon claims it's unavailable"
(lambda ()
(with-port-timeouts
(lambda ()
+ (set-store-connection-timeout
+ fetch-substitute-store)
(parameterize
((current-build-output-port log-port))
(build-things fetch-substitute-store
diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm
index 8067e88..e64842d 100644
--- a/guix-build-coordinator/utils.scm
+++ b/guix-build-coordinator/utils.scm
@@ -54,6 +54,8 @@
with-port-timeouts
+ set-store-connection-timeout
+
request-query-parameters
call-with-streaming-http-request
@@ -330,6 +332,14 @@ upcoming chunk."
(make-port-timeout-error))))))
(thunk)))
+(define* (set-store-connection-timeout store #:key (timeout 120))
+ (define raw-port (store-connection-socket store))
+
+ (when (defined? 'SO_RCVTIMEO)
+ ;; This is only supported on Guile 3.0.9 and later
+ (setsockopt raw-port SOL_SOCKET SO_RCVTIMEO `(,timeout . 0))
+ (setsockopt raw-port SOL_SOCKET SO_SNDTIMEO `(,timeout . 0))))
+
(define* (make-chunked-output-port* port #:key (keep-alive? #f)
(buffering 1200)
report-bytes-sent)
@@ -531,7 +541,11 @@ upcoming chunk."
#:timeout ,(* 10 60)))
(parameterize ((current-build-output-port log-port))
- (ensure-path store derivation-name)))
+ (with-port-timeouts
+ (lambda ()
+ (set-store-connection-timeout store)
+ (ensure-path store derivation-name))
+ #:timeout (* 120 1000))))
(with-store store
(apply set-build-options
store