Re: upload-pack is slow with lots of refs
- From
Shawn Pearce <spearce@spearce.org>
- Date
- Oct 5, 2012, 16:57 UTC
- Message-ID
- <CAJo=hJsYVdWeG0ZyqexEXNfOq_k1XDR_gGP+fy_z==LvdnWJTQ@mail.gmail.com>
- In-Reply-To
- <506E7D01.8080509@viscovery.net>
On Thu, Oct 4, 2012 at 11:24 PM, Johannes Sixt <j.sixt@viscovery.net> wrote:
Show 25 quoted lines
> Am 10/3/2012 21:41, schrieb Shawn Pearce: >> On Wed, Oct 3, 2012 at 11:55 AM, Jeff King <peff@peff.net> wrote: >>> On Wed, Oct 03, 2012 at 11:53:35AM -0700, Junio C Hamano wrote: >>>> Jeff King <peff@peff.net> writes: >>>> >>>>>> Has there been any work on extending the protocol so that the client >>>>>> tells the server what refs it's interested in? >>>>> >>>>> I don't think so. It would be hard to do in a backwards-compatible way, >>>>> because the advertisement is the first thing the server says, before it >>>>> has negotiated any capabilities with the client at all. >>>> >>>> That is being discussed but hasn't surfaced on the list. >>> >>> Out of curiosity, how are you thinking about triggering such a new >>> behavior in a backwards-compatible way? Invoke git-upload-pack2, and >>> fall back to reconnecting to start git-upload-pack if it fails? >> >> Basically, yes. New clients connect for git-upload-pack2. Over git:// >> the remote peer will just close the TCP socket with no messages. The >> client can fallback to git-upload-pack and try again. Over SSH a >> similar thing will happen in the sense there is no data output from >> the remote side, so the client can try again. > > These connections are bidirectional.
Smart HTTP is not bidirectional.
Show 9 quoted lines
> Upload-pack can just start > advertising refs in the "v1" way and announce a "v2" capability and listen > for response in parallel. A v2 capable client can start sending "wants" or > some other signal as soon as it sees the "v2" capability. Upload-pack, > which was listening for responses in parallel, can interrupt its > advertisements and continue with v2 protocol from here. > > This sounds so simple (not the implementation, of course) - I must be > missing something.
Smart HTTP is not bidirectional. The client can't cut off the server. Its also more complex to code the server to listen for a stop command from the client at the same time the server is blasting out useless references to the client.