Merge "Cluster UNREACHABLE_GARBAGE packs at the end of the search list"
This commit is contained in:
commit
e175daf123
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue