|
|
@@ -46,9 +46,11 @@ package org.eclipse.jgit.storage.dfs; |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.Collection; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
import java.util.concurrent.ThreadPoolExecutor; |
|
|
|
import java.util.concurrent.atomic.AtomicLong; |
|
|
|
import java.util.concurrent.atomic.AtomicReferenceArray; |
|
|
@@ -156,6 +158,9 @@ public final class DfsBlockCache { |
|
|
|
/** Cache of pack files, indexed by description. */ |
|
|
|
private final Map<DfsPackDescription, DfsPackFile> packCache; |
|
|
|
|
|
|
|
/** View of pack files in the pack cache. */ |
|
|
|
private final Collection<DfsPackFile> packFiles; |
|
|
|
|
|
|
|
/** Number of times a block was found in the cache. */ |
|
|
|
private final AtomicLong statHit; |
|
|
|
|
|
|
@@ -203,7 +208,9 @@ public final class DfsBlockCache { |
|
|
|
readAheadLimit = cfg.getReadAheadLimit(); |
|
|
|
readAheadService = cfg.getReadAheadService(); |
|
|
|
|
|
|
|
packCache = new HashMap<DfsPackDescription, DfsPackFile>(); |
|
|
|
packCache = new ConcurrentHashMap<DfsPackDescription, DfsPackFile>( |
|
|
|
16, 0.75f, 1); |
|
|
|
packFiles = Collections.unmodifiableCollection(packCache.values()); |
|
|
|
|
|
|
|
statHit = new AtomicLong(); |
|
|
|
statMiss = new AtomicLong(); |
|
|
@@ -234,6 +241,16 @@ public final class DfsBlockCache { |
|
|
|
return statEvict; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the pack files stored in this cache. |
|
|
|
* |
|
|
|
* @return a collection of pack files, some of which may not actually be |
|
|
|
* present; the caller should check the pack's cached size. |
|
|
|
*/ |
|
|
|
public Collection<DfsPackFile> getPackFiles() { |
|
|
|
return packFiles; |
|
|
|
} |
|
|
|
|
|
|
|
DfsPackFile getOrCreate(DfsPackDescription dsc, DfsPackKey key) { |
|
|
|
// TODO This table grows without bound. It needs to clean up |
|
|
|
// entries that aren't in cache anymore, and aren't being used |