Skip to content

Commit

Permalink
Merge branch 'jc/fetch-progressive-stride'
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
Junio C Hamano committed Mar 27, 2011
2 parents a080fdd + 066bf4c commit b3369ab
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions builtin/fetch-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,11 +229,25 @@ static void insert_alternate_refs(void)
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,
struct ref *refs)
{
int fetching;
int count = 0, flushes = 0, retval;
int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
const unsigned char *sha1;
unsigned in_vain = 0;
int got_continue = 0;
Expand Down Expand Up @@ -347,19 +361,20 @@ static int find_common(int fd[2], unsigned char *result_sha1,
if (args.verbose)
fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
in_vain++;
if (!(31 & ++count)) {
if (flush_at <= ++count) {
int ack;

packet_buf_flush(&req_buf);
send_request(fd[1], &req_buf);
strbuf_setlen(&req_buf, state_len);
flushes++;
flush_at = next_flush(count);

/*
* We keep one window "ahead" of the other side, and
* will wait for an ACK only on the next one
*/
if (!args.stateless_rpc && count == 32)
if (!args.stateless_rpc && count == INITIAL_FLUSH)
continue;

consume_shallow_list(fd[0]);
Expand Down

0 comments on commit b3369ab

Please sign in to comment.