Public Member Functions | Static Public Attributes

com.cosylab.logging.engine.cache.CacheEntriesQueue Class Reference

List of all members.

Public Member Functions

synchronized void put (CacheEntry entry) throws IOException
synchronized CacheEntry get () throws IOException
synchronized void clear ()
synchronized int size ()

Static Public Attributes

static final int MAX_QUEUE_LENGTH = 20000
static final int PAGE_LEN = 5000
static final int THRESHOLD = 12500

Detailed Description

The queue of entries.

This class has been introduced to avoid keeping in memory a never ending queue of CacheEntry and reduce the chance to face an out of memory at run-time.
This class is composed of two lists and a file. inMemoryQueue is the list of the entries to get. When this list contains few items then some more items are read from the file.
The other list, CacheEntriesQueue, is a buffer where the entries are stored ready to be flushed on disk. This is done to write more entries at once reducing the I/O and increasing the performances.

Implementation note
CacheEntry items are read only with the get method and pushed with the put.

Adding entries:
If there is enough room in inMemoryQueue (i.e. inMemoryQueue.size()<MAX_QUEUE_LENGTH) then a new entry is stored directly in that list; otherwise it is added to cachedEntries ready to be written on file. If the size of cachedEntries is greater then PAGE_LEN, the size of a page, then a page is flushed on disk. Note that what is in the list, cacheEntries is added at the end of the file.

Getting entries:
The entry to get is always in inMemoryQueue. After getting an entry, it checks if the the size of the queue allows to get new entries from the file or from the cachedEntries. Note that the right order is first the file and then cachedEntries. In fact cachedEntries, contains the last received entries, packed to be transferred on a new page on disk while the first entries to push in the queue are on a page disk (if any).

Author:
acaproni

Member Function Documentation

synchronized void com.cosylab.logging.engine.cache.CacheEntriesQueue.clear (  ) 

Clear the queue and the file (if any)

synchronized CacheEntry com.cosylab.logging.engine.cache.CacheEntriesQueue.get (  )  throws IOException

Get the next value from the queue.

Returns:
The next item in the queue or null if the queue is empty
Exceptions:
IOException In case of error during I/O

References com.cosylab.logging.engine.cache.CacheEntriesQueue.THRESHOLD.

Referenced by com.cosylab.logging.engine.cache.EngineCache.pop().

synchronized void com.cosylab.logging.engine.cache.CacheEntriesQueue.put ( CacheEntry  entry  )  throws IOException

Put an entry in Cache.

If the cache is full the entry is added to the buffer.

Parameters:
entry The not null CacheEntry to add to the queue
Exceptions:
IOException In case of I/O error while flushing the cache on disk

References com.cosylab.logging.engine.cache.CacheEntriesQueue.MAX_QUEUE_LENGTH, and com.cosylab.logging.engine.cache.CacheEntriesQueue.PAGE_LEN.

Referenced by com.cosylab.logging.engine.cache.EngineCache.push().

synchronized int com.cosylab.logging.engine.cache.CacheEntriesQueue.size (  ) 

Return the number of cache entries waiting in queue

References com.cosylab.logging.engine.cache.CacheEntriesQueue.PAGE_LEN.

Referenced by com.cosylab.logging.engine.cache.EngineCache.size().


Member Data Documentation

The max number of entries kept in memory.

Referenced by com.cosylab.logging.engine.cache.CacheEntriesQueue.put().

When in the LinkedBlockingQueue there are less entries then the THRESHOLD then the entries in the buffer are flushed in the queue

Referenced by com.cosylab.logging.engine.cache.CacheEntriesQueue.get().


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Enumerations Properties