From ec278439f3ff5dcd3d02c05099ba1724cc2459f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Thu, 10 Mar 2016 13:53:23 +0100 Subject: substitute: Optimize HTTP pipelining over TLS. * guix/scripts/substitute.scm (http-multiple-get): Write the requests to a bytevector output port before sending them. --- guix/scripts/substitute.scm | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index cc637c8d13..b057e9b12a 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -495,8 +495,17 @@ read the response body, and the previous result, starting with SEED, à la (setvbuf p _IOFBF (expt 2 16))) ;; Send all of REQUESTS in a row. - (for-each (cut write-request <> p) requests) - (force-output p) + ;; XXX: Do our own caching to work around inefficiencies when + ;; communicating over TLS: . + (let-values (((buffer get) (open-bytevector-output-port))) + ;; On Guile > 2.0.9, inherit the HTTP proxying property from P. + (when (module-variable (resolve-interface '(web http)) + 'http-proxy-port?) + (set-http-proxy-port?! buffer (http-proxy-port? p))) + + (for-each (cut write-request <> buffer) requests) + (put-bytevector p (get)) + (force-output p)) ;; Now start processing responses. (let loop ((requests requests) -- cgit v1.2.3