substitute: Reopen connection upon “Error in the push function” from GnuTLS.

This works around an occasional issue where substitution stops abruptly
due to “Error in the push function” from GnuTLS, as reported at
<https://issues.guix.gnu.org/71238> by Richard Sent.

* guix/scripts/substitute.scm (call-with-cached-connection): Add
‘error/push-error’ and ‘error/pull-error’ to the list of gnutls-error
values for which the connection is reopened.

Change-Id: Icf079dd10b16739f62fee15bc3d90bab77110576
This commit is contained in:
Ludovic Courtès 2024-08-15 18:07:52 +02:00
parent 9af235335e
commit fa70c14155
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -43,7 +43,11 @@ (define-module (guix scripts substitute)
#:select (uri-abbreviation nar-uri-abbreviation
(open-connection-for-uri
. guix:open-connection-for-uri)))
#:autoload (gnutls) (error/invalid-session error/again error/interrupted)
#:autoload (gnutls) (error/invalid-session
error/again
error/interrupted
error/push-error
error/pull-error)
#:use-module (guix progress)
#:use-module ((guix build syscalls)
#:select (set-thread-name))
@ -426,6 +430,11 @@ (define (call-with-cached-connection uri proc)
(memq (first args)
(list error/invalid-session
;; "Error in the push function" is
;; usually a transient error.
error/push-error
error/pull-error
;; XXX: These two are not properly handled in
;; GnuTLS < 3.7.3, in
;; 'write_to_session_record_port'; see