diff options
-rw-r--r-- | guix-build-coordinator/agent.scm | 2 | ||||
-rw-r--r-- | guix-build-coordinator/utils.scm | 16 |
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 |