Re: [RFC PATCH 01/13] serve: add command to advertise bundle URIs
From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-08-23 13:28:36
On Tue, Aug 10 2021, Derrick Stolee wrote:
On 8/5/2021 11:07 AM, Ævar Arnfjörð Bjarmason wrote: ...quoted
+bundle-uri CLIENT AND SERVER EXPECTATIONS +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The advertised bundles MUST contain one or more reference tips for use +by the client. Bundles that are not self-contained MUST use the +standard "-" prefixes in the bundle format to indicate their +prerequisites. I.e. they must be in the standard format "git bundle +create" would create. + +If after an `ls-refs` the client finds that the ref tips it wants can +be retrieved entirety from advertised bundle(s), it MAY +disconnect. The results of such a "clone" or "fetch" should be +indistinguishable from the state attained without using bundle-uri. + +The client MAY also keep the connection open pending download of the +bundle-uris, e.g. should on or more downloads (or their validation) +fail.The only technical thought I had (so far) about this proposal was that leaving the connection open while downloading the bundle would leave unnecessary load on the servers when no communication is happening. There is a cost to keeping an open SSH connection, so here it would be good to at least have the Git client close the connection after getting a 200 response from the bundle (but not waiting for all of its contents).
Thanks. Yes it's something I'll have to fix. I was hoping that I'd get away with it for an initial implementation, but e.g. using transfer.injectBundleURI to bootstrap chromium.git's repo from a bundle will take so long that Google's server will give up and hang up on you. I wonder if it's something the transport layer should be doing in general to resume connections if they go stale if it's at a point of clean separation in the dialog, but in any case I'll need it for bundle-uri. Closing the connection is also going to be more expensive in some cases, e.g. if the bundle takes 1s we'll open/close/download bundle-uri/open/close the connection, instead of of open/download bundle-uri/close. I wonder if anyone cares though, we can always apply some heuristic later I guess...