Subject: bug#73121: guix publish service never closes the connection

From: "Ashish SHUKLA" <[email-masked]>
Date: Sun, 08 Sep 2024 19:10:19 +0530

Hi,

When using a guix publish server (sans any nginx (or reverse proxy) front-end) as substitute server, it seems guix publish never closes the connection on certain URLs:

===============================================================
% curl -H 'User-Agent: GNU Guile' -v http://localhost:7888/nar/w0b5xvxg0phkm9gw5xcig0sb2ggcc053-git-2.46.0.tar.xz -o /dev/null
* Host localhost:7888 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying [::1]:7888...
* connect to ::1 port 7888 from ::1 port 49630 failed: Connection refused
*   Trying 127.0.0.1:7888...
* Connected to localhost (127.0.0.1) port 7888
> GET /nar/w0b5xvxg0phkm9gw5xcig0sb2ggcc053-git-2.46.0.tar.xz HTTP/1.1
> Host: localhost:7888
> Accept: */*
> User-Agent: GNU Guile
>
< HTTP/1.1 200 OK
< Content-Type: application/x-nix-archive;charset=ISO-8859-1
* no chunk, no close, no size. Assume close to signal end
<
{ [24 bytes data]
100 7399k    0 7399k    0     0  1026k      0 --:--:--  0:00:07 --:--:--     0
100 7399k    0 7399k    0     0   803k      0 --:--:--  0:00:09 --:--:--     0^CException: curl killed by signal interrupt
  [tty 24]:1:1-124: curl -H 'User-Agent: GNU Guile' -v http://localhost:7888/nar/w0b5xvxg0phkm9gw5xcig0sb2ggcc053-git-2.46.0.tar.xz -o /dev/null
===============================================================

guix-publish daemon is running with following configuration:

===============================================================
(service guix-publish-service-type
    (guix-publish-configuration
       (port 7888)
       (host "127.0.0.1")
       (advertise? #f)))
===============================================================

To workaround this problem in reverse proxy, either HTTP/1.0 or disable
keepalive setting in reverse proxy.

Thanks!
--
Ashish SHUKLA