@ThreadSafe public class FileCache extends java.lang.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 java.util.concurrent.ConcurrentHashMap<java.lang.Object,ucar.nc2.util.cache.FileCache.CacheElement> |
cache |
protected static org.slf4j.Logger |
cacheLog |
protected java.util.concurrent.atomic.AtomicInteger |
cleanups |
protected java.util.concurrent.ConcurrentHashMap<FileCacheable,ucar.nc2.util.cache.FileCache.CacheElement.CacheFile> |
files |
protected int |
hardLimit |
protected java.util.concurrent.atomic.AtomicBoolean |
hasScheduled |
protected java.util.concurrent.atomic.AtomicInteger |
hits |
protected static org.slf4j.Logger |
log |
protected int |
minElements |
protected java.util.concurrent.atomic.AtomicInteger |
miss |
protected java.lang.String |
name |
protected long |
period |
protected int |
softLimit |
protected java.util.concurrent.ConcurrentHashMap<java.lang.Object,ucar.nc2.util.cache.FileCache.Tracker> |
track |
protected boolean |
trackAll |
| Constructor and Description |
|---|
FileCache(int minElementsInMemory,
int maxElementsInMemory,
int period)
Constructor.
|
FileCache(int minElementsInMemory,
int softLimit,
int hardLimit,
int period)
Constructor.
|
FileCache(java.lang.String name,
int minElementsInMemory,
int softLimit,
int hardLimit,
int period)
Constructor.
|
FileCache(java.lang.String name,
int minElementsInMemory,
int softLimit,
int hardLimit,
int period,
boolean removeDeleted)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
FileCacheable |
acquire(FileFactory factory,
DatasetUrl durl) |
FileCacheable |
acquire(FileFactory factory,
DatasetUrl durl,
CancelTask cancelTask)
Acquire a FileCacheable, and lock it so no one else can use it.
|
FileCacheable |
acquire(FileFactory factory,
java.lang.Object hashKey,
DatasetUrl location,
int buffer_size,
CancelTask cancelTask,
java.lang.Object spiObject)
Acquire a FileCacheable from the cache, 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 |
eject(java.lang.Object hashKey)
Remove all instances of object from the cache
|
void |
enable()
Enable the cache, with the current set of parameters.
|
java.lang.String |
getInfo(FileCacheable ncfile) |
boolean |
release(FileCacheable ncfile)
Release the file.
|
void |
resetTracking() |
java.util.List<java.lang.String> |
showCache() |
void |
showCache(java.util.Formatter format)
Show individual cache entries, add to formatter.
|
void |
showStats(java.util.Formatter format)
Add stat report (hits, misses, etc) to formatter.
|
void |
showTracking(java.util.Formatter format) |
static void |
shutdown()
You must call shutdown() to shut down the background threads in order to get a clean process shutdown.
|
protected static final org.slf4j.Logger log
protected static final org.slf4j.Logger cacheLog
protected java.lang.String name
protected final int softLimit
protected final int minElements
protected final int hardLimit
protected final long period
protected final java.util.concurrent.atomic.AtomicBoolean hasScheduled
protected final java.util.concurrent.ConcurrentHashMap<java.lang.Object,ucar.nc2.util.cache.FileCache.CacheElement> cache
protected final java.util.concurrent.ConcurrentHashMap<FileCacheable,ucar.nc2.util.cache.FileCache.CacheElement.CacheFile> files
protected final java.util.concurrent.atomic.AtomicInteger cleanups
protected final java.util.concurrent.atomic.AtomicInteger hits
protected final java.util.concurrent.atomic.AtomicInteger miss
protected java.util.concurrent.ConcurrentHashMap<java.lang.Object,ucar.nc2.util.cache.FileCache.Tracker> track
protected boolean trackAll
public FileCache(int minElementsInMemory,
int maxElementsInMemory,
int period)
minElementsInMemory - keep this number in the cachemaxElementsInMemory - trigger a cleanup if it goes over this number.period - (secs) do periodic cleanups every this number of seconds.public FileCache(int minElementsInMemory,
int softLimit,
int hardLimit,
int period)
minElementsInMemory - 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 FileCache(java.lang.String name,
int minElementsInMemory,
int softLimit,
int hardLimit,
int period,
boolean removeDeleted)
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.removeDeleted - if true, then remove deleted files from the cache when a cleanup is performed.public FileCache(java.lang.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 static void shutdown()
public void disable()
disable in interface FileCacheIFpublic void enable()
enable in interface FileCacheIFpublic FileCacheable acquire(FileFactory factory, DatasetUrl durl, CancelTask cancelTask) throws java.io.IOException
factory - use this factory to open the file; may not be nulldurl - file location, also used as the cache name, will be passed to the NetcdfFileFactorycancelTask - user can cancel, ok to be null.java.io.IOException - on errorpublic FileCacheable acquire(FileFactory factory, DatasetUrl durl) throws java.io.IOException
acquire in interface FileCacheIFjava.io.IOExceptionpublic FileCacheable acquire(FileFactory factory, java.lang.Object hashKey, DatasetUrl location, int buffer_size, CancelTask cancelTask, java.lang.Object spiObject) throws java.io.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 - passed to the factory if object needs to be recreatedjava.io.IOException - on errorpublic void eject(java.lang.Object hashKey)
eject in interface FileCacheIFhashKey - the objectpublic boolean release(FileCacheable ncfile) throws java.io.IOException
release in interface FileCacheIFncfile - release this file.java.io.IOExceptionpublic java.lang.String getInfo(FileCacheable ncfile)
public void clearCache(boolean force)
clearCache in interface FileCacheIFforce - if true, remove them even if they are currently locked.public void showCache(java.util.Formatter format)
showCache in interface FileCacheIFformat - add to thispublic java.util.List<java.lang.String> showCache()
showCache in interface FileCacheIFpublic void showStats(java.util.Formatter format)
showStats in interface FileCacheIFformat - add to thispublic void showTracking(java.util.Formatter format)
showTracking in interface FileCacheIFpublic void resetTracking()
resetTracking in interface FileCacheIF