OPeNDAP Hyrax Back End Server (BES)  Updated for version 3.8.3
BESCache Class Reference

Implementation of a caching mechanism. More...

#include <BESCache.h>

Inheritance diagram for BESCache:
Inheritance graph
Collaboration diagram for BESCache:
Collaboration graph

Classes

struct  cache_entry
 for filename -> filesize map below More...
 
struct  CacheDirInfo
 Helper class for info on the cache directory. More...
 

Public Types

typedef std::multimap< double,
cache_entry, std::greater
< double > > 
CacheFilesByAgeMap
 Sugar for the multimap of entries sorted with older files first. More...
 

Public Member Functions

 BESCache (const string &cache_dir, const string &prefix, unsigned long long sizeInMegs)
 Constructor that takes as arguments the values of the cache dir, the file prefix, and the cache size. More...
 
 BESCache (BESKeys &keys, const string &cache_dir_key, const string &prefix_key, const string &size_key)
 Constructor that takes as arguments keys to the cache directory, file prefix, and size of the cache to be looked up a configuration file. More...
 
string cache_dir () const
 
unsigned long long cache_size () const
 
void collect_cache_dir_info (BESCache::CacheDirInfo &cd_info) const
 
virtual void dump (ostream &strm) const
 dumps information about this object More...
 
virtual bool is_cached (const string &src, string &target)
 Determine if the file specified by src is cached. More...
 
virtual bool lock (unsigned int retry_ms, unsigned int num_tries)
 lock the cache using a file lock More...
 
string match_prefix () const
 
string prefix () const
 
virtual void purge ()
 Check to see if the cache size exceeds the size specified in the constructor and purge older files until size is less. More...
 
virtual bool unlock ()
 unlock the cache More...
 
virtual ~BESCache ()
 

Detailed Description

Implementation of a caching mechanism.

The caching mechanism simply allows the user to create a cache. Cached files are typically specified by full path. The file name is changed by changing all slashes to pound signs (#), the ending extension is removed, and the specified prefix is prepended to the name of the cached file.

The purge method removes the oldest accessed files until the size of all files is less than that specified by the size in the constructors.

Definition at line 58 of file BESCache.h.

Member Typedef Documentation

typedef std::multimap<double, cache_entry, std::greater<double> > BESCache::CacheFilesByAgeMap

Sugar for the multimap of entries sorted with older files first.

Definition at line 71 of file BESCache.h.

Constructor & Destructor Documentation

BESCache::BESCache ( const string &  cache_dir,
const string &  prefix,
unsigned long long  sizeInMegs 
)

Constructor that takes as arguments the values of the cache dir, the file prefix, and the cache size.

Parameters
cache_dirdirectory where the files are cached
prefixprefix used to prepend to the resulting cached file
sizecache max size in megabytes (1 == 1048576 bytes)
Exceptions
BESSyntaxUserErrorif cache_dir or prefix is empty, if size is 0, or if the cache directory does not exist.

Definition at line 121 of file BESCache.cc.

BESCache::BESCache ( BESKeys keys,
const string &  cache_dir_key,
const string &  prefix_key,
const string &  size_key 
)

Constructor that takes as arguments keys to the cache directory, file prefix, and size of the cache to be looked up a configuration file.

The keys specified are looked up in the specified keys object. If not found or not set correctly then an exception is thrown. I.E., if the cache directory is empty, the size is zero, or the prefix is empty.

Parameters
keysBESKeys object used to look up the keys
cache_dir_keykey to look up in the keys file to find cache dir
prefix_keykey to look up in the keys file to find the cache prefix
size_keykey to look up in the keys file to find the cache size
Exceptions
BESSyntaxUserErrorif keys not set, cache dir or prefix empty, size is 0, or if cache dir does not exist.

Definition at line 146 of file BESCache.cc.

References BESKeys::get_value().

Here is the call graph for this function:

virtual BESCache::~BESCache ( )
inlinevirtual

Definition at line 134 of file BESCache.h.

Member Function Documentation

string BESCache::cache_dir ( ) const
inline

Definition at line 143 of file BESCache.h.

Referenced by BESUncompressManager::uncompress().

unsigned long long BESCache::cache_size ( ) const
inline

Definition at line 146 of file BESCache.h.

void BESCache::collect_cache_dir_info ( BESCache::CacheDirInfo cd_info) const
void BESCache::dump ( ostream &  strm) const
virtual

dumps information about this object

Displays the pointer value of this instance along with information about this cache.

Parameters
strmC++ i/o stream to dump the information to

Implements BESObj.

Definition at line 504 of file BESCache.cc.

References BESIndent::Indent(), BESIndent::LMarg(), and BESIndent::UnIndent().

Here is the call graph for this function:

bool BESCache::is_cached ( const string &  src,
string &  target 
)
virtual

Determine if the file specified by src is cached.

The src is the full name of the file to be cached. We are assuming that the file name passed has an extension on the end that will be stripped once the file is cached. In other words, if the full path to the file name is /usr/lib/data/fnoc1.nc.gz (a compressed netcdf file) then the resulting file name set in target will be set to #<prefix>#usr#lib#data#fnoc1.nc.

Parameters
srcsrc file that will be cached eventually
targetset to the resulting cached file
Returns
true if the file is cached already

Definition at line 277 of file BESCache.cc.

Referenced by BESUncompressManager::uncompress().

bool BESCache::lock ( unsigned int  retry,
unsigned int  num_tries 
)
virtual

lock the cache using a file lock

if the cache has not already been locked, lock it using a file lock.

Exceptions
BESInternalErrorif the cache is already locked

Definition at line 194 of file BESCache.cc.

Referenced by BESUncompressManager::uncompress().

string BESCache::match_prefix ( ) const
inline

Definition at line 144 of file BESCache.h.

string BESCache::prefix ( ) const
inline

Definition at line 145 of file BESCache.h.

void BESCache::purge ( )
virtual

Check to see if the cache size exceeds the size specified in the constructor and purge older files until size is less.

Usually called prior to caching a new file, this method will purge any files, oldest to newest, if the current size of the cache exceeds the size of the cache specified in the constructor.

Definition at line 324 of file BESCache.cc.

References BESCache::CacheDirInfo::_contents, BESCache::CacheDirInfo::_num_files_in_cache, BESCache::CacheDirInfo::_total_cache_files_size, BESDEBUG, BESISDEBUG, collect_cache_dir_info(), and BESCache::CacheDirInfo::get_avg_size().

Referenced by BESUncompressManager::uncompress().

Here is the call graph for this function:

bool BESCache::unlock ( )
virtual

unlock the cache

If the cache is locked, unlock it using the stored file lock descriptor

Exceptions
BESInternalErrorif the cache is not already locked

Definition at line 246 of file BESCache.cc.

Referenced by BESUncompressManager::uncompress().


The documentation for this class was generated from the following files: