[JGIT PATCH 0/5] Make ObjectLoader safer during repack
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Apr 23, 2009, 03:36 UTC
- Message-ID
- <1240457783-21434-1-git-send-email-spearce@spearce.org>
This is a start to fixing the ObjectLoader save during repack problems I talked about yesterday. It applies on top of the WindowedFile+PackFile patch I sent earlier today.
Patch 1 and 2 are trivial.
Patch 3 fixes the broken 10/10 test case I raised yesterday.
Patch 4 introduces that test case.
Patch 5 starts to fix PackWriter to be safe during repack. Its still a bit iffy. The basic logic here is sound, but I'm more worried about someone else calling PackFile.close() and closing the underlying RandomFile while we are otherwise accessing the file during the copyRaw in PackWriter. I *think* its impossible for that to occur, but I haven't proven it to myself yet, and its late, so this one is RFC for now.
Shawn O. Pearce (5):
Remove throws IOException from UnpackedObjectLoader.getCachedBytes
Add missing @Override annotations to UnpackedObjectLoader
Fully materialize an ObjectLoader before returning it from
ObjectDatabase
Test that ObjectLoader stays valid across repacks
Teach PackWriter to recover from removed/replaced packs.../org/spearce/jgit/lib/ConcurrentRepackTest.java | 40 +++++++ .../jgit/lib/DeltaOfsPackedObjectLoader.java | 7 +- .../spearce/jgit/lib/DeltaPackedObjectLoader.java | 41 +++---- .../jgit/lib/DeltaRefPackedObjectLoader.java | 9 +- .../src/org/spearce/jgit/lib/ObjectDirectory.java | 3 +- .../src/org/spearce/jgit/lib/ObjectLoader.java | 23 +--- .../src/org/spearce/jgit/lib/PackFile.java | 14 +- .../src/org/spearce/jgit/lib/PackWriter.java | 118 +++++++++++++------- .../org/spearce/jgit/lib/PackedObjectLoader.java | 78 +++++++++++-- .../org/spearce/jgit/lib/UnpackedObjectLoader.java | 4 +- .../spearce/jgit/lib/WholePackedObjectLoader.java | 21 ++-- .../src/org/spearce/jgit/lib/WindowCache.java | 59 +++++++---- 12 files changed, 280 insertions(+), 137 deletions(-)