Fix racy condition when a repository is repacked
commit4c8d63e588212f48e7ebd09580defd9a62c73c61
authorShawn O. Pearce <spearce@spearce.org>
Wed, 12 Aug 2009 19:45:23 +0000 (12 12:45 -0700)
committerRobin Rosenberg <robin.rosenberg@dewire.com>
Wed, 12 Aug 2009 22:24:37 +0000 (13 00:24 +0200)
treeb9812e3e1f0b744b2e1dec3cabcca5f50162ea4a
parent0bf795c4449ee8f9d022fc4eac32bfe6941f02a1
Fix racy condition when a repository is repacked

If the filesystem clock granularity is sufficiently large enough it
is possible for a repacking program such as `git repack` to change
the same directory more than once within the same modification time.

If JGit were to scan the directory between changes in the same
clock step it will never see the later edits, because the directory
modification time has not changed.

Instead we now keep track of the last time we read the directory.
If an object cannot be found on disk and the pack directory's last
modified time is less than 2 minutes since the last time we read
the directory's contents, we scan it again looking for changes.

Worst case scenario, JGit will list the pack directory once for
each requested missing object, until the directory has aged at
least 2 minutes.  Most repositories modify this directory only a
few times a week, so this is not an undue burden on the host.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
org.spearce.jgit/src/org/spearce/jgit/lib/ObjectDirectory.java