@ThreadSafe public class FileCacheARC extends Object implements FileCacheIF
NetcdfDataset.initNetcdfFileCache(...); // on application startup
...
NetcdfFile ncfile = null;
try {
ncfile = NetcdfDataset.acquireFile(location, cancelTask);
...
} finally {
if (ncfile != null) ncfile.close();
}
...
NetcdfDataset.shutdown(); // when terminating the application
All methods are thread safe.
Cleanup is done automatically in a background thread, using LRU algorithm.| Modifier and Type | Field and Description |
|---|---|
protected ConcurrentHashMap<Object,ucar.nc2.util.cache.FileCacheARC.CacheElement> |
cache |
protected static org.slf4j.Logger |
cacheLog |
protected ConcurrentHashMap<Integer,ucar.nc2.util.cache.FileCacheARC.CacheElement.CacheFile> |
files |
protected int |
hardLimit |
protected AtomicInteger |
hits |
protected static org.slf4j.Logger |
log |
protected int |
minElements |
protected AtomicInteger |
miss |
protected String |
name |
protected int |
period |
protected ConcurrentSkipListMap<ucar.nc2.util.cache.FileCacheARC.CacheElement,ucar.nc2.util.cache.FileCacheARC.CacheElement> |
shadowCache |
protected int |
softLimit |
protected ConcurrentHashMap<Object,ucar.nc2.util.cache.FileCacheARC.Tracker> |
track |
| Constructor and Description |
|---|
FileCacheARC(String name,
int minElementsInMemory,
int softLimit,
int hardLimit,
int period)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
FileCacheable |
acquire(FileFactory factory,
Object hashKey,
String location,
int buffer_size,
CancelTask cancelTask,
Object spiObject)
Acquire a FileCacheable from the cache, and lock it so no one else can use it.
|
FileCacheable |
acquire(FileFactory factory,
String location)
Acquire a FileCacheable, and lock it so no one else can use it.
|
void |
clearCache(boolean force)
Remove all cache entries.
|
void |
disable()
Disable the cache, and force release all files.
|
void |
enable()
Enable the cache, with the current set of parameters.
|
String |
getInfo(FileCacheable ncfile) |
void |
release(FileCacheable ncfile)
Release the file.
|
void |
resetTracking() |
List<String> |
showCache() |
void |
showCache(Formatter format)
Show individual cache entries, add to formatter.
|
void |
showStats(Formatter format)
Add stat report (hits, misses, etc) to formatter.
|
void |
showTracking(Formatter format) |
protected static final org.slf4j.Logger log
protected static final org.slf4j.Logger cacheLog
protected String name
protected final int softLimit
protected final int minElements
protected final int hardLimit
protected final int period
protected final ConcurrentSkipListMap<ucar.nc2.util.cache.FileCacheARC.CacheElement,ucar.nc2.util.cache.FileCacheARC.CacheElement> shadowCache
protected final ConcurrentHashMap<Object,ucar.nc2.util.cache.FileCacheARC.CacheElement> cache
protected final ConcurrentHashMap<Integer,ucar.nc2.util.cache.FileCacheARC.CacheElement.CacheFile> files
protected final AtomicInteger hits
protected final AtomicInteger miss
protected ConcurrentHashMap<Object,ucar.nc2.util.cache.FileCacheARC.Tracker> track
public FileCacheARC(String name, int minElementsInMemory, int softLimit, int hardLimit, int period)
name - of file cacheminElementsInMemory - keep this number in the cachesoftLimit - trigger a cleanup if it goes over this number.hardLimit - if > 0, never allow more than this many elements. This causes a cleanup to be done in the calling thread.period - if > 0, do periodic cleanups every this number of seconds.public void disable()
disable in interface FileCacheIFpublic void enable()
enable in interface FileCacheIFpublic FileCacheable acquire(FileFactory factory, String location) throws IOException
acquire in interface FileCacheIFfactory - use this factory to open the file; may not be nulllocation - file location, also used as the cache name, will be passed to the NetcdfFileFactoryIOException - on errorpublic FileCacheable acquire(FileFactory factory, Object hashKey, String location, int buffer_size, CancelTask cancelTask, Object spiObject) throws IOException
acquire in interface FileCacheIFfactory - use this factory to open the file if not in the cache; may not be nullhashKey - unique key for this file. If null, the location will be usedlocation - file location, may also used as the cache name, will be passed to the NetcdfFileFactorybuffer_size - RandomAccessFile buffer size, if <= 0, use default sizecancelTask - user can cancel, ok to be null.spiObject - sent to iosp.setSpecial() if not nullIOException - on errorpublic void release(FileCacheable ncfile) throws IOException
release in interface FileCacheIFncfile - release the lock on this FileCacheable object.IOException - if file not in cache.public String getInfo(FileCacheable ncfile) throws IOException
IOExceptionpublic void clearCache(boolean force)
clearCache in interface FileCacheIFforce - if true, remove them even if they are currently locked.public void showCache(Formatter format)
showCache in interface FileCacheIFformat - add to thispublic List<String> showCache()
showCache in interface FileCacheIFpublic void showStats(Formatter format)
showStats in interface FileCacheIFformat - add to thispublic void showTracking(Formatter format)
showTracking in interface FileCacheIFpublic void resetTracking()
resetTracking in interface FileCacheIFCopyright © 1999–2015 UCAR/Unidata. All rights reserved.