I did this
ArchLinux's pacman which is using libcurl through libalpm started to timeout on mirror synchronization if this mirror have http/2 enabled. Bisect is pointing to commit 0dc0362.
I also hacked a bit libalpm and here is an output:
== Info: using HTTP/2
== Info: [HTTP/2] [1] OPENED stream for https://mirror.kraski.tv/linux/archlinux/core/os/x86_64/core.db
== Info: [HTTP/2] [1] [:method: GET]
== Info: [HTTP/2] [1] [:scheme: https]
== Info: [HTTP/2] [1] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [1] [:path: /linux/archlinux/core/os/x86_64/core.db]
== Info: [HTTP/2] [1] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: Connection #0 to host mirror.kraski.tv left intact 15.9 KiB 0.00 B/s --:-- [#########--------------------------------------------------------------------] 12%
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults 128.4 KiB 4.18 MiB/s 00:00 [#############################################################################] 100%
== Info: Found bundle for host: 0x64c5f2a95bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [3] OPENED stream for https://mirror.kraski.tv/linux/archlinux/core/os/x86_64/core.db.sig
== Info: [HTTP/2] [3] [:method: GET]
== Info: [HTTP/2] [3] [:scheme: https]
== Info: [HTTP/2] [3] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [3] [:path: /linux/archlinux/core/os/x86_64/core.db.sig]
== Info: [HTTP/2] [3] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: [HTTP/2] [3] [accept: */*]
== Info: Exceeded the maximum allowed file size (16384) with 16384 bytes
== Info: process_pending_input: nghttp2_session_mem_recv() returned -902:The user callback function failed
== Info: Connection #0 to host mirror.kraski.tv left intact
extra
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults
== Info: Found bundle for host: 0x64c5f2a95bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [5] OPENED stream for https://mirror.kraski.tv/linux/archlinux/extra/os/x86_64/extra.db
== Info: [HTTP/2] [5] [:method: GET]
== Info: [HTTP/2] [5] [:scheme: https]
== Info: [HTTP/2] [5] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [5] [:path: /linux/archlinux/extra/os/x86_64/extra.db]
== Info: [HTTP/2] [5] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: [HTTP/2] [5] [accept: */*]
== Info: Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
== Info: Closing connection
extra.db failed to download
error: failed retrieving file 'extra.db' from mirror.kraski.tv : Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
error: failed to synchronize all databases (download library error)
It seems there is some trouble with client callbacks (according to "nghttp2_session_mem_recv() returned -902:The user callback function failed") when some file is not present on server (core.db.sig in the case above). Which then prevents downloading subsequent files.
I expected the following
Log with build before aformentioned commit:
== Info: using HTTP/2
== Info: [HTTP/2] [1] OPENED stream for https://mirror.kraski.tv/linux/archlinux/core/os/x86_64/core.db
== Info: [HTTP/2] [1] [:method: GET]
== Info: [HTTP/2] [1] [:scheme: https]
== Info: [HTTP/2] [1] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [1] [:path: /linux/archlinux/core/os/x86_64/core.db]
== Info: [HTTP/2] [1] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: Connection #0 to host mirror.kraski.tv left intact 0.0 B 0.00 B/s --:-- [-----------------------------------------------------------------------------] 0%
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults 128.4 KiB 4.82 MiB/s 00:00 [#############################################################################] 100%
== Info: Found bundle for host: 0x650a688f0bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [3] OPENED stream for https://mirror.kraski.tv/linux/archlinux/core/os/x86_64/core.db.sig
== Info: [HTTP/2] [3] [:method: GET]
== Info: [HTTP/2] [3] [:scheme: https]
== Info: [HTTP/2] [3] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [3] [:path: /linux/archlinux/core/os/x86_64/core.db.sig]
== Info: [HTTP/2] [3] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: [HTTP/2] [3] [accept: */*]
== Info: Exceeded the maximum allowed file size (16384) with 16384 bytes
== Info: Connection #0 to host mirror.kraski.tv left intact
extra
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults
== Info: Found bundle for host: 0x650a688f0bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [5] OPENED stream for https://mirror.kraski.tv/linux/archlinux/extra/os/x86_64/extra.db
== Info: [HTTP/2] [5] [:method: GET]
== Info: [HTTP/2] [5] [:scheme: https]
== Info: [HTTP/2] [5] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [5] [:path: /linux/archlinux/extra/os/x86_64/extra.db]
== Info: [HTTP/2] [5] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: Connection #0 to host mirror.kraski.tv left intact 15.9 KiB 0.00 B/s --:-- [-----------------------------------------------------------------------------] 0%
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults 8.1 MiB 67.4 MiB/s 00:00 [#############################################################################] 100%
== Info: Found bundle for host: 0x650a688f0bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [7] OPENED stream for https://mirror.kraski.tv/linux/archlinux/extra/os/x86_64/extra.db.sig
== Info: [HTTP/2] [7] [:method: GET]
== Info: [HTTP/2] [7] [:scheme: https]
== Info: [HTTP/2] [7] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [7] [:path: /linux/archlinux/extra/os/x86_64/extra.db.sig]
== Info: [HTTP/2] [7] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: [HTTP/2] [7] [accept: */*]
== Info: Exceeded the maximum allowed file size (16384) with 16384 bytes
== Info: Connection #0 to host mirror.kraski.tv left intact
multilib
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults
== Info: Found bundle for host: 0x650a688f0bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [9] OPENED stream for https://mirror.kraski.tv/linux/archlinux/multilib/os/x86_64/multilib.db
== Info: [HTTP/2] [9] [:method: GET]
== Info: [HTTP/2] [9] [:scheme: https]
== Info: [HTTP/2] [9] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [9] [:path: /linux/archlinux/multilib/os/x86_64/multilib.db]
== Info: [HTTP/2] [9] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: Connection #0 to host mirror.kraski.tv left intact 15.9 KiB 0.00 B/s --:-- [########---------------------------------------------------------------------] 11%
== Info: Couldn't find host mirror.kraski.tv in the .netrc file; using defaults 138.8 KiB 33.9 MiB/s 00:00 [#############################################################################] 100%
== Info: Found bundle for host: 0x650a688f0bc0 [can multiplex]
== Info: Re-using existing connection with host mirror.kraski.tv
== Info: [HTTP/2] [11] OPENED stream for https://mirror.kraski.tv/linux/archlinux/multilib/os/x86_64/multilib.db.sig
== Info: [HTTP/2] [11] [:method: GET]
== Info: [HTTP/2] [11] [:scheme: https]
== Info: [HTTP/2] [11] [:authority: mirror.kraski.tv]
== Info: [HTTP/2] [11] [:path: /linux/archlinux/multilib/os/x86_64/multilib.db.sig]
== Info: [HTTP/2] [11] [user-agent: pacman/6.1.0 (Linux x86_64) libalpm/14.0.0]
== Info: [HTTP/2] [11] [accept: */*]
== Info: Exceeded the maximum allowed file size (16384) with 16384 bytes
== Info: Connection #0 to host mirror.kraski.tv left intact
curl/libcurl version
curl 8.7.1 and current master branch
operating system
Archlinux
Linux xxx.xxx.xxx 6.8.1-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 16 Mar 2024 17:15:35 +0000 x86_64 GNU/Linux
I did this
ArchLinux's pacman which is using libcurl through libalpm started to timeout on mirror synchronization if this mirror have http/2 enabled. Bisect is pointing to commit 0dc0362.
I also hacked a bit libalpm and here is an output:
It seems there is some trouble with client callbacks (according to "nghttp2_session_mem_recv() returned -902:The user callback function failed") when some file is not present on server (core.db.sig in the case above). Which then prevents downloading subsequent files.
I expected the following
Log with build before aformentioned commit:
curl/libcurl version
curl 8.7.1 and current master branch
operating system
Archlinux
Linux xxx.xxx.xxx 6.8.1-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 16 Mar 2024 17:15:35 +0000 x86_64 GNU/Linux