From 41a18d57bcaf3bb7eb4bcee5c1d53a222d07316b Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 17 Nov 2011 11:44:43 -0800 Subject: [PATCH] Search for annotated tag reuse first 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 --- .../src/org/eclipse/jgit/storage/pack/PackWriter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java index f088d3224..dc33e4ece 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java @@ -968,10 +968,10 @@ public class PackWriter { if (cnt <= 4096) { // For small object counts, do everything as one list. BlockList tmp = new BlockList(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);