Hi, Mathieu Othacehe <[email protected]> skribis:
> Investigating it, I found that the connection is closed and opened > multiple times in the call-with-cached-connection procedure of the (guix > script substitute) module. > > It looks like its because a 'bad-headers exception is raised when trying > to parse an eof object: > > ;;; (error bad-header (read-header-line #<eof>)) > > > I'm not sure where this eof comes from. There is this comment in the > http-multiple-get procedure in (guix http-client): > > ;; Swallow networking errors that could occur due to connection reuse > ;; and the like; they will be handled down the road when trying to > ;; read responses. > (false-if-networking-error > (begin > (for-each (cut write-request <> buffer) batch) > (put-bytevector p (get)) > (force-output p)))) > > which would suggest that connection reuse could cause networking errors? Trying to see exactly which bit is at fault here. First, ‘http-multiple-get’ seems to be working as expected when passed a fresh connection: --8<---------------cut here---------------start------------->8--- scheme@(guix http-client)> (http-multiple-get (string->uri "https://ci.guix.gnu.org") (lambda (request response port result) (get-bytevector-n port (response-content-length response)) (cons #t result)) '() (make-list 5000 (build-request (build-uri 'https #:host "ci.guix.gnu.org" #:path "/d7gpr41qpsifri54vp2lzjs99zkylscq.narinfo")))) connecting (5000 requests left)...connecting (4400 requests left)...connecting (3800 requests left)...connecting (3200 requests left)...connecting (2600 requests left)...connecting (2000 requests left)...connecting (1400 requests left)...connecting (800 requests left)...connecting (200 requests left)...$143 = (#t #t …) scheme@(guix http-client)> (length $143) $144 = 5000 --8<---------------cut here---------------end--------------->8--- But maybe I’m not looking at the right thing. Do you have evidence or a reproducer? Thanks, Ludo’.
