Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

com::cosylab::logging::client::cache::LogMultiFileCache Class Reference

Inheritance diagram for com::cosylab::logging::client::cache::LogMultiFileCache:

Inheritance graph
[legend]
Collaboration diagram for com::cosylab::logging::client::cache::LogMultiFileCache:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 LogMultiFileCache (long fileSize) throws LogCacheException
 LogMultiFileCache () throws LogCacheException
ILogEntry getLog (Integer logKey) throws LogCacheException
synchronized int add (ILogEntry log) throws LogCacheException
synchronized void deleteLog (Integer logKey) throws LogCacheException
int getSize ()
Integer getLastLog ()
Integer getFirstLog ()
void deleteLogs (Collection< Integer > keys) throws LogCacheException
synchronized void clear () throws LogCacheException
void replaceLog (Integer key, ILogEntry log) throws LogCacheException
Iterator< ILogEntryiterator ()
Set< Integer > keySet ()
int getFirstLogs (int n, Collection< Integer > keys)
long getLogFileSize () throws LogCacheException
long getMaxFileSize () throws LogCacheException
void setDebugTrace (boolean flag) throws LogCacheException
void printFileTableInfo () throws LogCacheException
int getActiveCacheFiles ()

Static Public Attributes

final String FILEMAXSIZE_PROPERTY_NAME = "jlog.cache.fileMaxSize"
final long DEFAULT_FILEMAXSIZE = 1000000

Private Member Functions

void printDebugTrace (String traceInfo)
MultiFileTableRecord createNewFileRecord () throws LogCacheException
MultiFileTableRecord searchFileLogTable (Integer logKey) throws LogCacheException

Static Private Member Functions

long getDefaultMaxFileSize ()

Private Attributes

boolean debugTrace = false
long fileMaxSize
Vector< MultiFileTableRecordlogFileTable = new Vector<MultiFileTableRecord>()
volatile int logsInCache = 0
int ID = -1

Detailed Description

This class manages a set of LogBufferedFileCache objects allowing the storing of logs in different files, though from the user point of view the logs are stored or retrieved from single data store.

This is due to the fact that files can grow up to a given size and hence setting a limit on the number of logs that can be collected.

Logs are added to a file until it reaches a given size, then a new file is created. Logs have different length and therefore the number of logs in each File Buffered Cache will be different (see example below).

Logs are accessible by the user through a keyword (logKey) which is implemented as an increased running number. On the other hand, within each File Buffered Cache they have their own numbering system which starts from 0 to the maximum number of logs.

Example :

logKey logCounter Buffered File Range Cache Range -------------------------------------------------------- 0 - 10 11 0 - 10 file1 11 - 25 15 0 - 14 file2 26 - 32 7 0 - 6 file3 33 - 50 18 0 - 18 file4

When logs are deleted they are no longer accessible : when all logs stored in a single file are marked as deleted the corresponding logCounter = 0 and as consequence the file itself is removed.

Using the example let's assume we delete the logs with the following keyword : 26,27,28,31,32, from now on these logs will not be accessible for the user.

logKey logCounter Buffered File Range Cache Range -------------------------------------------------------- 0 - 10 11 0 - 10 file1 11 - 25 15 0 - 14 file2 26 - 32 2 0 - 6 file3 33 - 50 18 0 - 18 file4

If we delete also logs with keywords 29 and 30 the logCounter will be zero and file3 will be deleted.

logKey Mapping When retrieving the log we need to re-map the global log keyword into the keyword used to add the log to the specific Buffered File Cache. This is done by simply subtracting the minimum key value from the logKey.

Example : Retrieve logKey 20. logKey 20 is stored in the second Buffered File Cache and it is accessible with the local key = (20 - 11) = 9

Author:
mcomin


Constructor & Destructor Documentation

com::cosylab::logging::client::cache::LogMultiFileCache::LogMultiFileCache long  fileSize  )  throws LogCacheException [inline]
 

Builds a LogMultiFileCache objects setting the maximum size of the cache files

Parameters:
fileSize The maximum size of cache files

com::cosylab::logging::client::cache::LogMultiFileCache::LogMultiFileCache  )  throws LogCacheException [inline]
 

Constructor

The maximum size of the files is read from the system properties. If the property is not found a default value is used.


Member Function Documentation

synchronized int com::cosylab::logging::client::cache::LogMultiFileCache::add ILogEntry  log  )  throws LogCacheException [inline]
 

Add a log to the cache

Parameters:
log The log to add to the cache

Implements com::cosylab::logging::client::cache::ILogMap.

Reimplemented in com::cosylab::logging::client::cache::LogCache.

synchronized void com::cosylab::logging::client::cache::LogMultiFileCache::clear  )  throws LogCacheException [inline]
 

Clear the Map i.e. remove all the logs and keys from the map

Exceptions:
LogCacheException 
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

Reimplemented in com::cosylab::logging::client::cache::LogCache.

MultiFileTableRecord com::cosylab::logging::client::cache::LogMultiFileCache::createNewFileRecord  )  throws LogCacheException [inline, private]
 

Creates a new record for the log file table : min/max log indexes are initialized according to the total number of received logs.

The create LogFileTableRecord is added to the table of file records.

synchronized void com::cosylab::logging::client::cache::LogMultiFileCache::deleteLog Integer  logKey  )  throws LogCacheException [inline]
 

Delete a log with the given key.

Parameters:
pos The key of the log to delete

Implements com::cosylab::logging::client::cache::ILogMap.

Reimplemented in com::cosylab::logging::client::cache::LogCache.

void com::cosylab::logging::client::cache::LogMultiFileCache::deleteLogs Collection< Integer >  keys  )  throws LogCacheException [inline]
 

Delete a set of logs

Parameters:
keys The keys of logs to delete
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

int com::cosylab::logging::client::cache::LogMultiFileCache::getActiveCacheFiles  )  [inline]
 

Returns:
the number of the files used by the cache

long com::cosylab::logging::client::cache::LogMultiFileCache::getDefaultMaxFileSize  )  [inline, static, private]
 

Get the max size of the file out of the system properties or uses the default value if the property does not exist

Integer com::cosylab::logging::client::cache::LogMultiFileCache::getFirstLog  )  [inline]
 

Return the key of the first valid log (FIFO). The key of the first log is 0 but it can change if the log 0 has been deleted.

Returns:
The key of the first log null if the cache is empty
See also:
com.cosylab.logging.client.cache.ILogMap
Exceptions:
In case of error getting the first log

Implements com::cosylab::logging::client::cache::ILogMap.

int com::cosylab::logging::client::cache::LogMultiFileCache::getFirstLogs int  n,
Collection< Integer >  keys
[inline]
 

Append at most n keys from the first valid logs to the collection. First here means first in the FIFO policy.

The number of added keys can be less then n if the cache doesn't contain enough logs.

Parameters:
n The desired number of keys of first logs
keys The collection to add they keys to
Returns:
The number of keys effectively added
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

Integer com::cosylab::logging::client::cache::LogMultiFileCache::getLastLog  )  [inline]
 

Return the key of the last valid log (FIFO) The key of the last log is the key of the last inserted log but it can change if such log has been deleted

Returns:
The key of the last inserted log null if the cache is empty
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

ILogEntry com::cosylab::logging::client::cache::LogMultiFileCache::getLog Integer  logKey  )  throws LogCacheException [inline]
 

Retrieves a log by means of its keyword.

Parameters:
pos The key of the log to retrieve

Implements com::cosylab::logging::client::cache::ILogMap.

Reimplemented in com::cosylab::logging::client::cache::LogCache.

long com::cosylab::logging::client::cache::LogMultiFileCache::getLogFileSize  )  throws LogCacheException [inline]
 

Return the current size of the log file

See also:

long com::cosylab::logging::client::cache::LogMultiFileCache::getMaxFileSize  )  throws LogCacheException [inline]
 

Return the current maximum size of the log file

See also:

int com::cosylab::logging::client::cache::LogMultiFileCache::getSize  )  [inline]
 

Returns:
The number of logs in the map
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

Iterator<ILogEntry> com::cosylab::logging::client::cache::LogMultiFileCache::iterator  )  [inline]
 

Return an Iterator to browse the logs in the map. The order the iterator returns the logs is that of the keys.

Returns:
an Iterator over the elements in this map
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

Reimplemented in com::cosylab::logging::client::cache::LogCache.

Set<Integer> com::cosylab::logging::client::cache::LogMultiFileCache::keySet  )  [inline]
 

The keys in the map

Returns:
The key in the map
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

Reimplemented in com::cosylab::logging::client::cache::LogCache.

void com::cosylab::logging::client::cache::LogMultiFileCache::printDebugTrace String  traceInfo  )  [inline, private]
 

Prints trace info if traceDebug flag is true

void com::cosylab::logging::client::cache::LogMultiFileCache::printFileTableInfo  )  throws LogCacheException [inline]
 

Return the current maximum size of the log file

See also:

void com::cosylab::logging::client::cache::LogMultiFileCache::replaceLog Integer  key,
ILogEntry  log
throws LogCacheException [inline]
 

Replace the log in the given position with the new one

Parameters:
position The position of the log to replace
log The key (identifier) of the log
See also:
com.cosylab.logging.client.cache.ILogMap

Implements com::cosylab::logging::client::cache::ILogMap.

MultiFileTableRecord com::cosylab::logging::client::cache::LogMultiFileCache::searchFileLogTable Integer  logKey  )  throws LogCacheException [inline, private]
 

Looks in the log file table in which file buffered cache the log has been stored.

The search is made by checking the min and max key of the logs contained in each record against the key of the searched log. As a consequence the record returned by this method is the only one record that can contain this log but it could be that the log is not there (for example it has been deleted)

Parameters:
logKey The key of the log to look for
Returns:
The record containing the log
Exceptions:
LogCacheException If no record is found or an error happened

void com::cosylab::logging::client::cache::LogMultiFileCache::setDebugTrace boolean  flag  )  throws LogCacheException [inline]
 

Return the current maximum size of the log file

See also:


Member Data Documentation

boolean com::cosylab::logging::client::cache::LogMultiFileCache::debugTrace = false [private]
 

final long com::cosylab::logging::client::cache::LogMultiFileCache::DEFAULT_FILEMAXSIZE = 1000000 [static]
 

long com::cosylab::logging::client::cache::LogMultiFileCache::fileMaxSize [private]
 

final String com::cosylab::logging::client::cache::LogMultiFileCache::FILEMAXSIZE_PROPERTY_NAME = "jlog.cache.fileMaxSize" [static]
 

int com::cosylab::logging::client::cache::LogMultiFileCache::ID = -1 [private]
 

Vector<MultiFileTableRecord> com::cosylab::logging::client::cache::LogMultiFileCache::logFileTable = new Vector<MultiFileTableRecord>() [private]
 

volatile int com::cosylab::logging::client::cache::LogMultiFileCache::logsInCache = 0 [private]
 


The documentation for this class was generated from the following file:
Generated on Thu Apr 30 03:13:05 2009 for ACS Java API by doxygen 1.3.8