Bug#978671: apt http transport gets stuck after package download
Package: apt
Version: 1.8.2.1
Severity: normal
Tags: patch
Dear Maintainer,
On Debian Buster we're seeing 30s timeouts when downloading
a particular set of debian packages from an internal repo:
```
$ time apt-get download -y rubygem-stud rubygem-mustache rubygem-insist rubygem-pleaserun rubygem-fpm
...
Fetched 451 kB in 30s (15.0 kB/s)
real 0m31.022s
user 0m0.923s
sys 0m0.080s
```
The issue is fixed in the following commit in apt 2.1.9:
```
commit 08f05aa8beb58fa32485e2087eb21a9f3cb267bb
Author: Julian Andres Klode <julian.klode@canonical.com>
Date: Mon Jun 29 14:03:21 2020 +0200
http: Redesign reading of pending data
Instead of reading the data early, disable the timeout for the
select() call and read the data later. Also, change Read() to
call only once to drain the buffer in such instances.
We could optimize this to call read() multiple times if there
is also pending stuff on the socket, but that it slightly more
complex and should not provide any benefits.
```
Please consider backporting this into Debian Buster,
as it fixes the problem and the patch itself applies cleanly.
-- System Information:
Debian Release: 10.6
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 5.4.70
Kernel taint flags: TAINT_OOT_MODULE
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE=C (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: unable to detect
Versions of packages apt depends on:
ii adduser 3.118
ii debian-archive-keyring 2019.1
ii gpgv 2.2.12-1+deb10u1
ii libapt-pkg5.0 1.8.2.1
ii libc6 2.28-10
ii libgcc1 1:8.3.0-6
ii libgnutls30 3.6.7-4+deb10u5
ii libseccomp2 2.5.1-1
ii libstdc++6 8.3.0-6
Versions of packages apt recommends:
ii ca-certificates 20200601~deb10u1
Versions of packages apt suggests:
pn apt-doc <none>
pn aptitude | synaptic | wajig <none>
ii dpkg-dev 1.19.7
ii gnupg 2.2.12-1+deb10u1
ii gnupg2 2.2.12-1+deb10u1
pn powermgmt-base <none>
-- no debconf information
Reply to: