]> source.dussan.org Git - jgit.git/commitdiff
Search for annotated tag reuse first 44/4644/2
authorShawn O. Pearce <spearce@spearce.org>
Thu, 17 Nov 2011 19:44:43 +0000 (11:44 -0800)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 18 Nov 2011 23:55:52 +0000 (15:55 -0800)
Annotated tags are relatively rare and currently are scheduled in a
pack file near the commits, decreasing the time it takes to resolve
client requests reading tags as part of a history traversal.

Putting them first before the commits allows the storage system to
page in the tag area, and have it relatively hot in the LRU when
the nearby commit area gets examined too. Later looking at the
tree and blob data will pollute the cache, making it more likely
the tags are not loaded and would require file IO.

Change-Id: I425f1f63ef937b8447c396939222ea20fdda290f

org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

index f088d3224cb48699b4e457e5c1711bbc6524f89b..dc33e4ece790c6e99a376863f50d691d7d51da10 100644 (file)
@@ -968,10 +968,10 @@ public class PackWriter {
                if (cnt <= 4096) {
                        // For small object counts, do everything as one list.
                        BlockList<ObjectToPack> tmp = new BlockList<ObjectToPack>(cnt);
+                       tmp.addAll(objectsLists[Constants.OBJ_TAG]);
                        tmp.addAll(objectsLists[Constants.OBJ_COMMIT]);
                        tmp.addAll(objectsLists[Constants.OBJ_TREE]);
                        tmp.addAll(objectsLists[Constants.OBJ_BLOB]);
-                       tmp.addAll(objectsLists[Constants.OBJ_TAG]);
                        searchForReuse(monitor, tmp);
                        if (pruneCurrentObjectList) {
                                // If the list was pruned, we need to re-prune the main lists.
@@ -982,10 +982,10 @@ public class PackWriter {
                        }
 
                } else {
+                       searchForReuse(monitor, objectsLists[Constants.OBJ_TAG]);
                        searchForReuse(monitor, objectsLists[Constants.OBJ_COMMIT]);
                        searchForReuse(monitor, objectsLists[Constants.OBJ_TREE]);
                        searchForReuse(monitor, objectsLists[Constants.OBJ_BLOB]);
-                       searchForReuse(monitor, objectsLists[Constants.OBJ_TAG]);
                }
 
                endPhase(monitor);