Ludovic Courtès writes: > Christopher Baines skribis: > >> In f50f5751fff4cfc6d5abba9681054569694b7a5c, the way fetch was called within >> process-substitution was changed. As with-cached-connection actually includes >> important error handling for the opening of a HTTP request (when using a >> cached connection), this change removed some error handling. >> >> This commit adds that error handling back, >> (call-)with-cached-connection is back, rebranded as >> call-with-cached-connection-and-error-handling. >> >> * guix/scripts/substitute.scm (process-substitution): Retry once for some >> errors when making HTTP requests to fetch substitutes. > > Please mention also the new procedure, and a > “Fixes .” line > >> +(define (call-with-cached-connection-and-error-handling uri proc) >> + (define (get-port) >> + (open-connection-for-uri/cached uri >> + #:verify-certificate? #f)) >> + >> + (let ((port (get-port))) >> + (catch #t >> + (lambda () >> + (proc port)) >> + (lambda (key . args) >> + ;; If PORT was cached and the server closed the connection in the >> + ;; meantime, we get EPIPE. In that case, open a fresh connection >> + ;; and retry. We might also get 'bad-response or a similar >> + ;; exception from (web response) later on, once we've sent the >> + ;; request, or a ERROR/INVALID-SESSION from GnuTLS. >> + (if (or (and (eq? key 'system-error) >> + (= EPIPE (system-error-errno `(,key ,@args)))) >> + (and (eq? key 'gnutls-error) >> + (eq? (first args) error/invalid-session)) >> + (memq key '(bad-response bad-header bad-header-component))) >> + (begin >> + (close-port port) ; close the port to get a fresh one >> + (proc (get-port))) > > I find it marginally clearer to pass #:fresh? #t (as was done in > the code removed in 7c85877fdf964694061e3192eac35723ebc047bf) than to > rely on the closed-port side effect. > > I think it’s OK to remove ‘-and-error-handling’ because that doesn’t > really tell much and because too many words obscure the message IMO, but > that’s a detail. I also like the helper macro as was removed in > 7c85877fdf964694061e3192eac35723ebc047bf. Sure, I'll send a v3 set of patches shortly.