Merge branch 'jc/fetch-progressive-stride'

* jc/fetch-progressive-stride:
  fetch-pack: use smaller handshake window for initial request
  fetch-pack: progressively use larger handshake windows
  fetch-pack: factor out hardcoded handshake window size

Conflicts:
	builtin/fetch-pack.c
This commit is contained in:
Junio C Hamano 2011-03-26 20:13:15 -07:00
commit b3369abfeb

View File

@ -229,11 +229,25 @@ static void insert_alternate_refs(void)
foreach_alt_odb(refs_from_alternate_cb, insert_one_alternate_ref); foreach_alt_odb(refs_from_alternate_cb, insert_one_alternate_ref);
} }
#define INITIAL_FLUSH 16
#define LARGE_FLUSH 1024
static int next_flush(int count)
{
if (count < INITIAL_FLUSH * 2)
count += INITIAL_FLUSH;
else if (count < LARGE_FLUSH)
count <<= 1;
else
count += LARGE_FLUSH;
return count;
}
static int find_common(int fd[2], unsigned char *result_sha1, static int find_common(int fd[2], unsigned char *result_sha1,
struct ref *refs) struct ref *refs)
{ {
int fetching; int fetching;
int count = 0, flushes = 0, retval; int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
const unsigned char *sha1; const unsigned char *sha1;
unsigned in_vain = 0; unsigned in_vain = 0;
int got_continue = 0; int got_continue = 0;
@ -347,19 +361,20 @@ static int find_common(int fd[2], unsigned char *result_sha1,
if (args.verbose) if (args.verbose)
fprintf(stderr, "have %s\n", sha1_to_hex(sha1)); fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
in_vain++; in_vain++;
if (!(31 & ++count)) { if (flush_at <= ++count) {
int ack; int ack;
packet_buf_flush(&req_buf); packet_buf_flush(&req_buf);
send_request(fd[1], &req_buf); send_request(fd[1], &req_buf);
strbuf_setlen(&req_buf, state_len); strbuf_setlen(&req_buf, state_len);
flushes++; flushes++;
flush_at = next_flush(count);
/* /*
* We keep one window "ahead" of the other side, and * We keep one window "ahead" of the other side, and
* will wait for an ACK only on the next one * will wait for an ACK only on the next one
*/ */
if (!args.stateless_rpc && count == 32) if (!args.stateless_rpc && count == INITIAL_FLUSH)
continue; continue;
consume_shallow_list(fd[0]); consume_shallow_list(fd[0]);