Make it easy to experiment what remote access to objects would be like if the network ran at say 1 ms round trip latency to obtain any object not on the local repository. $ time git ls-tree -r HEAD real 0m0.059s $ time GIT_RTT=1 git ls-tree -r HEAD real 0m27.283s Yes kids, slowing down loose object access by just 1ms if all objects are remote can take a simple ls-tree from 59ms to more than enough time to drink tea or coffee. Why would you do this? Perhaps you need more time in your day to consume tea or coffee. Set GIT_RTT and enjoy a beverage. So-not-signed-off-by: this author or anyone else --- :-) sha1_file.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sha1_file.c b/sha1_file.c index 6e8c05d..9bdcbc3 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -38,6 +38,7 @@ const unsigned char null_sha1[20]; static const char *no_log_pack_access = "no_log_pack_access"; static const char *log_pack_access; +static useconds_t rtt; /* * This is meant to hold a *small* number of objects that you would @@ -436,9 +437,20 @@ void prepare_alt_odb(void) read_info_alternates(get_object_directory(), 0); } +static void apply_rtt() +{ + if (!rtt) { + char *rtt_str = getenv("GIT_RTT"); + rtt = rtt_str ? strtoul(rtt_str, NULL, 10) * 1000 : 1; + } + if (rtt > 1) + usleep(rtt); +} + static int has_loose_object_local(const unsigned char *sha1) { char *name = sha1_file_name(sha1); + apply_rtt(); return !access(name, F_OK); } @@ -1303,6 +1315,7 @@ void prepare_packed_git(void) if (prepare_packed_git_run_once) return; + prepare_packed_git_one(get_object_directory(), 1); prepare_alt_odb(); for (alt = alt_odb_list; alt; alt = alt->next) { @@ -1439,6 +1452,7 @@ static int open_sha1_file(const unsigned char *sha1) struct alternate_object_database *alt; fd = git_open_noatime(name); + apply_rtt(); if (fd >= 0) return fd; -- 1.9.0.rc1.175.g0b1dcb5 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html