@ -46,9 +46,11 @@ package org.eclipse.jgit.storage.dfs;
import java.io.IOException ;
import java.io.IOException ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.Collection ;
import java.util.Collections ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.Map ;
import java.util.concurrent.ConcurrentHashMap ;
import java.util.concurrent.ThreadPoolExecutor ;
import java.util.concurrent.ThreadPoolExecutor ;
import java.util.concurrent.atomic.AtomicLong ;
import java.util.concurrent.atomic.AtomicLong ;
import java.util.concurrent.atomic.AtomicReferenceArray ;
import java.util.concurrent.atomic.AtomicReferenceArray ;
@ -156,6 +158,9 @@ public final class DfsBlockCache {
/** Cache of pack files, indexed by description. */
/** Cache of pack files, indexed by description. */
private final Map < DfsPackDescription , DfsPackFile > packCache ;
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. */
/** Number of times a block was found in the cache. */
private final AtomicLong statHit ;
private final AtomicLong statHit ;
@ -203,7 +208,9 @@ public final class DfsBlockCache {
readAheadLimit = cfg . getReadAheadLimit ( ) ;
readAheadLimit = cfg . getReadAheadLimit ( ) ;
readAheadService = cfg . getReadAheadService ( ) ;
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 ( ) ;
statHit = new AtomicLong ( ) ;
statMiss = new AtomicLong ( ) ;
statMiss = new AtomicLong ( ) ;
@ -234,6 +241,16 @@ public final class DfsBlockCache {
return statEvict ;
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 ) {
DfsPackFile getOrCreate ( DfsPackDescription dsc , DfsPackKey key ) {
// TODO This table grows without bound. It needs to clean up
// TODO This table grows without bound. It needs to clean up
// entries that aren't in cache anymore, and aren't being used
// entries that aren't in cache anymore, and aren't being used