Class FileCacheARC

  • All Implemented Interfaces:
    FileCacheIF

    @ThreadSafe
    public class FileCacheARC
    extends Object
    implements FileCacheIF
    ARC cach algorithm not complete.
    • Field Detail

      • log

        protected static final org.slf4j.Logger log
      • cacheLog

        protected static final org.slf4j.Logger cacheLog
      • softLimit

        protected final int softLimit
      • minElements

        protected final int minElements
      • hardLimit

        protected final int hardLimit
      • period

        protected final int period
      • shadowCache

        protected final ConcurrentSkipListMap<ucar.nc2.util.cache.FileCacheARC.CacheElement,​ucar.nc2.util.cache.FileCacheARC.CacheElement> shadowCache
    • Constructor Detail

      • FileCacheARC

        public FileCacheARC​(String name,
                            int minElementsInMemory,
                            int softLimit,
                            int hardLimit,
                            int period)
        Constructor.
        Parameters:
        name - of file cache
        minElementsInMemory - keep this number in the cache
        softLimit - 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.
    • Method Detail

      • disable

        public void disable()
        Disable the cache, and force release all files. You must still call shutdown() before exiting the application.
        Specified by:
        disable in interface FileCacheIF
      • enable

        public void enable()
        Enable the cache, with the current set of parameters.
        Specified by:
        enable in interface FileCacheIF
      • acquire

        public FileCacheable acquire​(FileFactory factory,
                                     DatasetUrl location)
                              throws IOException
        Acquire a FileCacheable, and lock it so no one else can use it. call FileCacheable.close() when done.
        Specified by:
        acquire in interface FileCacheIF
        Parameters:
        factory - use this factory to open the file; may not be null
        location - file location, also used as the cache name, will be passed to the NetcdfFileFactory
        Returns:
        NetcdfFile corresponding to location.
        Throws:
        IOException - on error
      • acquire

        public FileCacheable acquire​(FileFactory factory,
                                     Object hashKey,
                                     DatasetUrl location,
                                     int buffer_size,
                                     CancelTask cancelTask,
                                     Object spiObject)
                              throws IOException
        Acquire a FileCacheable from the cache, and lock it so no one else can use it. If not already in cache, open it with FileFactory, and put in cache.

        Call FileCacheable.close() when done, (rather than FileCacheIF.release() directly) and the file is then released instead of closed.

        If cache size goes over maxElement, then immediately (actually in 100 msec) schedule a cleanup in a background thread. This means that the cache should never get much larger than maxElement, unless you have them all locked.

        Specified by:
        acquire in interface FileCacheIF
        Parameters:
        factory - use this factory to open the file if not in the cache; may not be null
        hashKey - unique key for this file. If null, the location will be used
        location - file location, may also used as the cache name, will be passed to the NetcdfFileFactory
        buffer_size - RandomAccessFile buffer size, if <= 0, use default size
        cancelTask - user can cancel, ok to be null.
        spiObject - sent to iosp.setSpecial() if not null
        Returns:
        FileCacheable corresponding to location.
        Throws:
        IOException - on error
      • eject

        public void eject​(Object hashKey)
        LOOK copied from FileCache, probably wrong Remove all instances of object from the cache
        Specified by:
        eject in interface FileCacheIF
        Parameters:
        hashKey - the object
      • release

        public boolean release​(FileCacheable ncfile)
                        throws IOException
        Release the file. This unlocks it, updates its lastAccessed date. FileCacheable.close() needs to call this instead of actually closing.
        Specified by:
        release in interface FileCacheIF
        Parameters:
        ncfile - release the lock on this FileCacheable object.
        Throws:
        IOException - if file not in cache.
      • clearCache

        public void clearCache​(boolean force)
        Remove all cache entries.
        Specified by:
        clearCache in interface FileCacheIF
        Parameters:
        force - if true, remove them even if they are currently locked.
      • showCache

        public void showCache​(Formatter format)
        Show individual cache entries, add to formatter.
        Specified by:
        showCache in interface FileCacheIF
        Parameters:
        format - add to this
      • showStats

        public void showStats​(Formatter format)
        Add stat report (hits, misses, etc) to formatter.
        Specified by:
        showStats in interface FileCacheIF
        Parameters:
        format - add to this