mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
substitute: Cache and reuse connections while substituting.
That way, when fetching a series of substitutes from the same server(s), the connection is reused instead of being closed/opened for each substitutes, which saves on network round trips and TLS handshakes. * guix/http-client.scm (http-fetch): Add #:keep-alive? and honor it. * guix/progress.scm (progress-report-port): Add #:close? parameter and honor it. * guix/scripts/substitute.scm (at-most): Return the tail as a second value. (fetch): Add #:port and #:keep-alive? and honor them. (%max-cached-connections): New variable. (open-connection-for-uri/cached, call-with-cached-connection): New procedures. (with-cached-connection): New macro. (process-substitution): Wrap 'fetch' call in 'with-cached-connection'. Pass #:close? to 'progress-report-port'.
This commit is contained in:
parent
711df9ef3c
commit
5ff521452b
4 changed files with 116 additions and 34 deletions
|
@ -337,9 +337,10 @@ should be a <progress-reporter> object."
|
|||
(report total)
|
||||
(loop total (get-bytevector-n! in buffer 0 buffer-size))))))))
|
||||
|
||||
(define (progress-report-port reporter port)
|
||||
(define* (progress-report-port reporter port #:key (close? #t))
|
||||
"Return a port that continuously reports the bytes read from PORT using
|
||||
REPORTER, which should be a <progress-reporter> object."
|
||||
REPORTER, which should be a <progress-reporter> object. When CLOSE? is true,
|
||||
PORT is closed when the returned port is closed."
|
||||
(match reporter
|
||||
(($ <progress-reporter> start report stop)
|
||||
(let* ((total 0)
|
||||
|
@ -364,5 +365,6 @@ REPORTER, which should be a <progress-reporter> object."
|
|||
;; trace.
|
||||
(unless (zero? total)
|
||||
(stop))
|
||||
(close-port port)))))))
|
||||
(when close?
|
||||
(close-port port))))))))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue