git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: <rsbecker@nexbridge.com>
To: "'Paweł Bogusławski'" <pawel.boguslawski@ib.pl>,
	"'brian m. carlson'" <sandals@crustytoothpaste.net>,
	git@vger.kernel.org
Subject: RE: Cloning does not work on available download bandwidth changes
Date: Thu, 23 May 2024 08:07:13 -0400	[thread overview]
Message-ID: <036f01daad09$c279e410$476dac30$@nexbridge.com> (raw)
In-Reply-To: <293afb32-99b1-4562-b339-7862698ef00f@ib.pl>

On Wednesday, May 22, 2024 6:58 PM, Paweł Bogusławski wrote:
>W dniu 22.05.2024 o 23:52, brian m. carlson pisze:
>
>> On 2024-05-22 at 15:02:51, Paweł Bogusławski wrote:
>>> Started to clone big git repo on not-too-fast, _stable_ VDSL link (up
>>> to 20mbps down)...
>>>
>>>      $ git clone https://github.com/googleapis/google-api-go-client
>>>      Cloning into 'google-api-go-client'...
>>>      remote: Enumerating objects: 644446, done.
>>>      remote: Counting objects: 100% (6922/6922), done.
>>>      remote: Compressing objects: 100% (2904/2904), done.
>>>      Receiving objects:   0% (3859/644446), 20.82 MiB | 1.01 MiB/s
>>>
>>> ...and then started to watch a VOD movie on same link; when VOD
>>> buffers data, eats almost all available down bandwidth and leaves
>>> only about 100 kB/s for git...
>>>
>>>      Receiving objects:   1% (7111/644446), 44.49 MiB | 130.00 KiB/s
>>>
>>> ...and when VOD stops buffering and whole bandwith is available for
>>> git again, git transfer starts to grow...
>>>
>>>      Receiving objects:   1% (7660/644446), 50.56 MiB | 575.00 KiB/s
>>>
>>> ...but finally git throws an error
>>>
>>>      error: 181 bytes of body are still expected5 MiB | 1015.00 KiB/s
>>>      fetch-pack: unexpected disconnect while reading sideband packet
>>>      fatal: early EOF
>>>      fatal: index-pack failed
>>>
>>> or sometimes:
>>>
>>>      error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly:
>>> CANCEL (err 8)
>>>      error: 6109 bytes of body are still expected
>>>      fetch-pack: unexpected disconnect while reading sideband packet
>>>      fatal: early EOF
>>>      fatal: fetch-pack: invalid index-pack output
>>>
>>> No such problems when downloading bigger file (i.e. linux kernel
>>> source) with wget or curl instead of git clone (wget/curl transfer
>>> drops to about
>>> 100 kB/s when VOD buffers and increases to full speed when VOD is not
>>> transferring and transfer finishes successfully).
>>>
>>> Sounds like a bug in git; should not throw an error on available
>>> download bandwidth changes as wget and curl do and should not require
>>> any params tuning (to stop users flooding bugtrackers).
>> I don't believe this is a bug in Git.  The problem here is a network
>> issue of some sort that's causing the connection to be interrupted or
>> dropped.  This is very common, but the possible causes are many.
>>
>> A lot of times we see this it's some sort of proxy, and that can be a
>> non-default antivirus or firewall or TLS MITM device, but that's
>> usually on Windows, and you're using Debian.  It can also be just a
>> bad connection, poor traffic management by your ISP, or a flaky
>> wireless or wired network card.
>>
>> My _guess_ about what's happening here is poor traffic management:
>> because video is typically flagged as low-latency in DSCP, some device
>> on the path is prioritizing it to the exclusion of all other traffic,
>> which is causing the Git connection to be dropped.  I have no proof of
>> this, though.
>
>Try to run
>
>git clone https://github.com/googleapis/google-api-go-client
>
>and limit interface speed somehow i.e.
>
>tc qdisc add dev eth0 root handle 1: htb default 12 tc class add dev eth0 parent 1:1
>classid 1:12 htb rate 20kbps ceil 20kbps tc qdisc add dev eth0 parent 1:12 netem
>delay 1000ms
>
>and after a while restore speed with i.e.
>
>tc qdisc del dev eth0 parent 1:12 netem delay 1000ms
>
>I tried this in Debian 11 and  git 2.30.2 died with:
>
>error: 5723 bytes of body are still expected MiB | 920.00 KiB/s
>fetch-pack: unexpected disconnect while reading sideband packet
>fatal: early EOF
>fatal: index-pack failed

I have tried this from my home ISP. It does a little throttling but sustained between 5-6 MiB/s for most of the transfer. We have seen related issues around ISP throttling that causes connections to drop for very large repositories. However, in the test I just ran, both git and https are happy to complete.

$ git clone https://github.com/googleapis/google-api-go-client
Cloning into 'google-api-go-client'...
remote: Enumerating objects: 644446, done.
remote: Counting objects: 100% (6922/6922), done.
remote: Compressing objects: 100% (2904/2904), done.
remote: Total 644446 (delta 3722), reused 6567 (delta 3445), pack-reused 637524
Receiving objects: 100% (644446/644446), 1.46 GiB | 7.45 MiB/s, done.
Resolving deltas: 100% (392971/392971), done.
Updating files: 100% (1372/1372), done.

$ git version
git version 2.43.0

Have you tried using SSH to do the clone? Assuming you have your public key registered on GitHub: git clone ssh://git@github.com/googleapis/google-api-go-client

This runs about slightly slower.

$ git clone ssh://git@github.com/googleapis/google-api-go-client
Cloning into 'google-api-go-client'...
remote: Enumerating objects: 644446, done.
remote: Counting objects: 100% (6922/6922), done.
remote: Compressing objects: 100% (2911/2911), done.
remote: Total 644446 (delta 3720), reused 6563 (delta 3438), pack-reused 637524
Receiving objects: 100% (644446/644446), 1.46 GiB | 6.31 MiB/s, done.
Resolving deltas: 100% (392969/392969), done.
Updating files: 100% (1372/1372), done.



      parent reply	other threads:[~2024-05-23 12:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-22 15:02 Cloning does not work on available download bandwidth changes Paweł Bogusławski
2024-05-22 21:52 ` brian m. carlson
2024-05-22 22:58   ` Paweł Bogusławski
2024-05-23  9:04     ` Jeff King
2024-05-23 11:15       ` Paweł Bogusławski
2024-05-23 12:07     ` rsbecker [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='036f01daad09$c279e410$476dac30$@nexbridge.com' \
    --to=rsbecker@nexbridge.com \
    --cc=git@vger.kernel.org \
    --cc=pawel.boguslawski@ib.pl \
    --cc=sandals@crustytoothpaste.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).