Hi Duy, Duy Nguyen wrote: > On Fri, Jan 26, 2018 at 6:58 AM, Brandon Williams <bmwill@xxxxxxxxxx> wrote: >> + stateless-rpc >> +--------------- >> + >> +If advertised, the `stateless-rpc` capability indicates that the server >> +supports running commands in a stateless-rpc mode, which means that a >> +command lasts for only a single request-response round. >> + >> +Normally a command can last for as many rounds as are required to >> +complete it (multiple for negotiation during fetch or no additional >> +trips in the case of ls-refs). If the client sends the `stateless-rpc` >> +capability with a value of `true` (in the form `stateless-rpc=true`) >> +then the invoked command must only last a single round. > > Speaking of stateless-rpc, I remember last time this topic was brought > up, there was some discussion to kind of optimize it for http as well, > to fit the "client sends request, server responds data" model and > avoid too many round trips (ideally everything happens in one round > trip). Does it evolve to anything real? All the cool stuff happened > while I was away, sorry if this was discussed and settled. We have a few different ideas for improving negotiation. They were speculative enough that we didn't want to make them part of the baseline protocol v2. Feel free to poke me in a new thread. :) Some teasers: - allow both client and server to suggest commits in negotiation, instead of just the client? - send a bloom filter for the peer to filter their suggestions against? - send other basic information like maximum generation number or maximum commit date? - exponential backoff in negotiation instead of linear walking? prioritizing ref tips? Imitating the bitmap selection algorithm? - at the "end" of negotiation, sending a graph data structure instead of a pack, to allow an extra round trip to produce a truly minimal pack? Those are some initial ideas, but it's also likely that someone can come up with some other experiments to try, too. (E.g. we've looked at various papers on set reconciliation, but they don't make enough use of the graph structure to help much.) Thanks, Jonathan