Subject: Re: bug#62334: Network is unreachable only for recursive pypi import

From: Simon Tournier <[email-masked]>
Date: Thu, 27 Apr 2023 15:32:24 +0200

Hi,

On mar., 25 avril 2023 at 14:23, Simon Tournier <[email-masked]> wrote:

> Using the diff below,

diff --git a/guix/build/download.scm b/guix/build/download.scm
index db0a39084b..2eee984b31 100644
--- a/guix/build/download.scm
+++ b/guix/build/download.scm
@@ -409,18 +409,24 @@ (define addresses
                  (socket (addrinfo:fam ai) SOCK_STREAM IPPROTO_IP))))
       (catch 'system-error
         (lambda ()
-          (connect* s (addrinfo:addr ai) timeout)
-
+          (pk 'uri (uri->string uri))
+          (pk 'before s (addrinfo:addr ai) timeout)
+          (pk 'connect* (connect* s (addrinfo:addr ai) timeout))
+          (pk 'done)
           ;; Buffer input and output on this port.
           (setvbuf s 'block)
           ;; If we're using a proxy, make a note of that.
           (when http-proxy (set-http-proxy-port?! s #t))
           s)
         (lambda args
+          (pk 'failed s)
           ;; Connection failed, so try one of the other addresses.
           (close s)
+          (pk 'closed)
           (if (null? (cdr addresses))
-              (apply throw args)
+              (begin
+                (pk 'boum)
+                (apply throw args))
               (loop (cdr addresses))))))))
 
 (define (setup-http-tunnel port uri)
@@ -465,6 +471,7 @@ (define https-proxy (let ((proxy (getenv "https_proxy")))
                          (parameterize ((current-http-proxy https-proxy))
                            (thunk))
                          (thunk)))))))
+
     (with-https-proxy
      (let ((s (open-socket-for-uri uri #:timeout timeout)))
        ;; Buffer input and output on this port.

>                       for some mysterious reasons, ’connect*’ throws the
> error:
>
> --8<---------------cut here---------------start------------->8---
> $ ./pre-inst-env guix import pypi -r cdlib
> [...]
> Starting download of /tmp/guix-file.Ujg3KY
> From https://files.pythonhosted.org/packages/49/01/21337857631a97ab551bb2e3b5691ed6b1b9586011aa6a5355b9694a37fa/demon-2.0.6.tar.gz...
>
> ;;; (uri "https://files.pythonhosted.org/packages/49/01/21337857631a97ab551bb2e3b5691ed6b1b9586011aa6a5355b9694a37fa/demon-2.0.6.tar.gz")
>
> ;;; (before #<input-output: socket 14> #(2 2454407487 443) 10)
>
> ;;; (failed #<input-output: socket 14>)
>
> ;;; (closed)
>
> ;;; (uri "https://files.pythonhosted.org/packages/49/01/21337857631a97ab551bb2e3b5691ed6b1b9586011aa6a5355b9694a37fa/demon-2.0.6.tar.gz")
>
> ;;; (before #<input-output: socket 14> #(10 55849932267565577100763269369304187673 443 0 0) 10)
>
> ;;; (failed #<input-output: socket 14>)
>
> ;;; (closed)
>
> ;;; (boum)
> In procedure connect: Network is unreachable
> --8<---------------cut here---------------end--------------->8---
>
> and note it is an issue on our side:
>
> --8<---------------cut here---------------start------------->8---
> $ ./pre-inst-env guix import pypi -r demon
> ;;; (uri "https://pypi.org/pypi/demon/json")
>
> ;;; (before #<input-output: socket 13> #(2 2539978975 443) #f)
>
> ;;; (connect* #t)
>
> ;;; (done)
>
> Starting download of /tmp/guix-file.G5r627
> From https://files.pythonhosted.org/packages/49/01/21337857631a97ab551bb2e3b5691ed6b1b9586011aa6a5355b9694a37fa/demon-2.0.6.tar.gz...
>
> ;;; (uri "https://files.pythonhosted.org/packages/49/01/21337857631a97ab551bb2e3b5691ed6b1b9586011aa6a5355b9694a37fa/demon-2.0.6.tar.gz")
>
> ;;; (before #<input-output: socket 14> #(2 2454407487 443) 10)
>
> ;;; (connect* #<unspecified>)
>
> ;;; (done)
>  ….6.tar.gz  7KiB                     4.2MiB/s 00:00 ▕██████████████████▏ 100.0%
>
> Starting download of /tmp/guix-file.4L0Phu
> From https://files.pythonhosted.org/packages/96/85/5f9146e3f8d7324d8741cd3bea9b99926d5ee75571b9610c661b1bbd06f5/demon-2.0.6-py3-none-any.whl...
>
> ;;; (uri "https://files.pythonhosted.org/packages/96/85/5f9146e3f8d7324d8741cd3bea9b99926d5ee75571b9610c661b1bbd06f5/demon-2.0.6-py3-none-any.whl")
>
> ;;; (before #<input-output: socket 15> #(2 2454407487 443) 10)
>
> ;;; (connect* #<unspecified>)
>
> ;;; (done)
>  …3-none-any.whl  7KiB                5.5MiB/s 00:00 ▕██████████████████▏ 100.0%
> (define-public python-demon
>   (package
>     (name "python-demon")
>     (version "2.0.6")
>     (source (origin
>               (method url-fetch)
>               (uri (pypi-uri "demon" version))
>               (sha256
>                (base32
>                 "0nd370yjfb3jirmxd0wa03c75dl7jac4xfsq1rvp5483mxddirb0"))))
>     (build-system python-build-system)
>     (propagated-inputs (list python-networkx python-tqdm))
>     (home-page "https://github.com/GiulioRossetti/DEMON")
>     (synopsis "Community Discovery algorithm")
>     (description "Community Discovery algorithm")
>     (license license:bsd-2)))
> --8<---------------cut here---------------end--------------->8---
>
>
> Maybe, it is a regression from some recent updates of Guile?

Anyone else is able to reproduce the same error?

Cheers,
simon