index-pack: avoid excessive re-reading of pack directory
commit0eeb077be7d526635995e17808927c94c70be665
authorJeff King <peff@peff.net>
Tue, 9 Jun 2015 17:24:37 +0000 (9 13:24 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 9 Jun 2015 19:26:35 +0000 (9 12:26 -0700)
treeaa0c85228872134e3497235bc1a86009a6f20dcc
parent282616c72d1d08a77ca4fe1186cb708c38408d87
index-pack: avoid excessive re-reading of pack directory

Since 45e8a74 (has_sha1_file: re-check pack directory before
giving up, 2013-08-30), we spend extra effort for
has_sha1_file to give the right answer when somebody else is
repacking. Usually this effort does not matter, because
after finding that the object does not exist, the next step
is usually to die().

However, some code paths make a large number of
has_sha1_file checks which are _not_ expected to return 1.
The collision test in index-pack.c is such a case. On a
local system, this can cause a performance slowdown of
around 5%. But on a system with high-latency system calls
(like NFS), it can be much worse.

This patch introduces a "quick" flag to has_sha1_file which
callers can use when they would prefer high performance at
the cost of false negatives during repacks. There may be
other code paths that can use this, but the index-pack one
is the most obviously critical, so we'll start with
switching that one.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/index-pack.c
cache.h
sha1_file.c