[JGIT PATCH v2 00/11] WindowCache rewrite... with tests
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Apr 29, 2009, 18:54 UTC
- Message-ID
- <1241031288-23437-1-git-send-email-spearce@spearce.org>
Actually, this is my entire outstanding patch set series.
1 and 2 should be trivial to apply.
3-6 should be fairly straightforward.
7 maybe we delay until later, but I don't think any applications use that map type.
8 is pretty trivial, and is needed to prevent 9 from deadlocking.
9-11 is the rewrite of WindowCache, with new unit tests to get higher levels of coverage in this section of the code. Actually doing better is really hard, as we'd need to cause thread race conditions deep within critical sections. The only way I can think to do that is to add injection points where we can insert "evil other thread" logic during the unit test, and rely on the JIT to compile them out in normal application usage. Ick. Its also quite fragile.
Shawn O. Pearce (11):
Fix more computation of integer average overflows
Fix performance problem recently introduced to
DeltaPackedObjectLoader
Replace inefficient new String(String) constructor to silence
FindBugs
Replace inefficient new Long(long) constructor to silence FindBugs
Change IndexPack to use ObjectIdSubclassMap instead of ObjectIdMap
Use getCachedBytes in IndexPack to avoid an unnecessary copy
Remove ObjectIdMap from the JGit library
Don't use ByteWindows when checking pack file headers/footers
Rewrite WindowCache to be easier to follow and maintain
Add tests for WindowCache.reconfigure cases
Add tests to increase coverage of WindowCache.../jgit/test/resources/all_packed_objects.txt | 96 ++++ .../org/spearce/jgit/lib/ConcurrentRepackTest.java | 4 - .../tst/org/spearce/jgit/lib/ObjectIdMapTest.java | 103 ---- .../org/spearce/jgit/lib/WindowCacheGetTest.java | 143 ++++++ .../jgit/lib/WindowCacheReconfigureTest.java | 119 +++++ .../src/org/spearce/jgit/lib/ByteArrayWindow.java | 57 +-- .../src/org/spearce/jgit/lib/ByteBufferWindow.java | 41 +- .../src/org/spearce/jgit/lib/ByteWindow.java | 91 +--- .../spearce/jgit/lib/DeltaPackedObjectLoader.java | 1 + .../src/org/spearce/jgit/lib/ObjectIdMap.java | 201 -------- .../org/spearce/jgit/lib/ObjectIdSubclassMap.java | 31 ++- .../src/org/spearce/jgit/lib/OffsetCache.java | 534 ++++++++++++++++++++ .../src/org/spearce/jgit/lib/PackFile.java | 128 +++-- .../src/org/spearce/jgit/lib/PackIndexV1.java | 2 +- .../src/org/spearce/jgit/lib/PackIndexV2.java | 6 +- .../org/spearce/jgit/lib/PackedObjectLoader.java | 11 +- .../src/org/spearce/jgit/lib/RefDatabase.java | 3 +- .../src/org/spearce/jgit/lib/WindowCache.java | 424 +++++----------- .../src/org/spearce/jgit/lib/WindowCursor.java | 42 +- .../src/org/spearce/jgit/transport/IndexPack.java | 129 +++-- .../src/org/spearce/jgit/transport/LongMap.java | 152 ++++++ org.spearce.jgit/src/org/spearce/jgit/util/NB.java | 32 ++ 22 files changed, 1465 insertions(+), 885 deletions(-) create mode 100644 org.spearce.jgit.test/tst-rsrc/org/spearce/jgit/test/resources/all_packed_objects.txt delete mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/ObjectIdMapTest.java create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheGetTest.java create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheReconfigureTest.java delete mode 100644 org.spearce.jgit/src/org/spearce/jgit/lib/ObjectIdMap.java create mode 100644 org.spearce.jgit/src/org/spearce/jgit/lib/OffsetCache.java create mode 100644 org.spearce.jgit/src/org/spearce/jgit/transport/LongMap.java