Merge "Cluster UNREACHABLE_GARBAGE packs at the end of the search list"

This commit is contained in:
Shawn Pearce 2013-03-12 17:56:48 -04:00 committed by Gerrit Code Review @ Eclipse.org
commit e175daf123
2 changed files with 20 additions and 5 deletions

View File

@ -65,7 +65,7 @@ public abstract class DfsObjDatabase extends ObjectDatabase {
/** Sources for a pack file. */
public static enum PackSource {
/** The pack is created by ObjectInserter due to local activity. */
INSERT,
INSERT(0),
/**
* The pack is created by PackParser due to a network event.
@ -76,7 +76,7 @@ public static enum PackSource {
* storage layout preferred by this version. Received packs are likely
* to be either compacted or garbage collected in the future.
*/
RECEIVE,
RECEIVE(0),
/**
* Pack was created by Git garbage collection by this implementation.
@ -87,7 +87,7 @@ public static enum PackSource {
*
* @see DfsGarbageCollector
*/
GC,
GC(1),
/**
* The pack was created by compacting multiple packs together.
@ -98,7 +98,7 @@ public static enum PackSource {
*
* @see DfsPackCompactor
*/
COMPACT,
COMPACT(1),
/**
* Pack was created by Git garbage collection.
@ -107,7 +107,13 @@ public static enum PackSource {
* last GC pass. It is retained in a new pack until it is safe to prune
* these objects from the repository.
*/
UNREACHABLE_GARBAGE;
UNREACHABLE_GARBAGE(2);
final int category;
PackSource(int category) {
this.category = category;
}
}
private final AtomicReference<PackList> packList;

View File

@ -303,6 +303,15 @@ public boolean equals(Object b) {
* the other pack.
*/
public int compareTo(DfsPackDescription b) {
// Cluster by PackSource, pushing UNREACHABLE_GARBAGE to the end.
PackSource as = getPackSource();
PackSource bs = b.getPackSource();
if (as != null && bs != null) {
int cmp = as.category - bs.category;
if (cmp != 0)
return cmp;
}
// Newer packs should sort first.
int cmp = Long.signum(b.getLastModified() - getLastModified());
if (cmp != 0)