public class RamJournalRM extends AbstractJournalRM
To use the Resource Manager, configure it using Dependency Injection by passing in the populated dependency object at instantiation.. Once configured, start the Resource Manager via the AbstractJournalRM.start()
method, and then obtain BinaryStore
instances via the AbstractJournalRM.createBinaryStore()
method. When a BinaryStore instance is no longer required, dispose of it via the Disposable
interface, and similarly stop()
or AbstractJournalRM.dispose()
of the Resource Manager when it is no longer needed to ensure that any resources it allocated are cleaned up and released.
The limits on the journal are as follows:
Note that with a flash journal backing up the RAM journal, the limits have a different meaning:
Note that, outside of the initial configuration, there is no difference in the use of the RAM journal with or without the flash journal; the combination of the RAM journal with the flash journal is transparent to the clients, with the only obvious difference being the significantly reduced possibility of an exception due to the RAM being exhausted.
Modifier and Type | Class and Description |
---|---|
protected class |
RamJournalRM.BufferPool
A pooling implementation for WriteBuffer objects.
|
static class |
RamJournalRM.DefaultDependencies
The DefaultDependencies class provides a default implementation of Dependencies.
|
static interface |
RamJournalRM.Dependencies
The Dependencies interface provides a RamJournalRM object with its external dependencies.
|
protected class |
RamJournalRM.FlashConsumer
The FlashConsumer is a conduit between this RamJournalRM and the FlashJournalRM, allowing this journal to read/write to/from the other flash journal, and for the flash journal to notify this journal of lifecycle and other events.
|
protected class |
RamJournalRM.JournalFile
A JournalFile is created for each RAM buffer used to store the journal contents.
|
protected class |
RamJournalRM.JournalImpl
A Journal implementation managed by this Journal Resource Manager.
|
AbstractJournalRM.CollectorDaemon
Modifier and Type | Field and Description |
---|---|
protected RamJournalRM.FlashConsumer |
m_flash
The conduit between this RAM journal resource manager and the flash journal resource manager.
|
protected FlashJournalRM |
m_jrnlrm
A reference to a flash journal resource manager to use to read/write to/from flash for data that doesn't fit in memory.
|
protected RamJournalRM.BufferPool |
m_pool
The buffer pool.
|
protected static long |
MASK_FILE_ID
The 64-bit bitmask for the file index.
|
protected static long |
MASK_LENGTH
The 64-bit bitmask for the value length.
|
protected static long |
MASK_OFFSET
The 64-bit bitmask for the value offset.
|
protected static long |
MASK_RAM_FLAG
The 64-bit bitmask for the RAM flag.
|
protected static int |
SHIFT_FILE_ID
The location of the file id within the ticket.
|
protected static int |
SHIFT_LENGTH
The location of the value-length within the ticket.
|
protected static int |
SHIFT_OFFSET
The location of the value-offset within the ticket.
|
protected static int |
SHIFT_RAM_FLAG
The location of the RAM flag within the ticket.
|
protected static String |
TYPE_NAME
A simple type name to be used as part of MBean Objectnames.
|
DEDUPE_ENABLED, m_ajournalfile, m_cJournalFiles, m_daemonCollector, m_dblFileSizeFactor, m_dependencies, m_dflHighestLoadFactor, m_jrnlfile, m_loader, m_nState, m_setJournals, MASK_COMPACT_FLAG, MASK_COMPACT_LENGTH, SHIFT_COMPACT_FLAG, SHIFT_COMPACT_LENGTH, STATE_CONFIGURED, STATE_INITIAL, STATE_RUNNING, STATE_STOPPED, STATE_STOPPING
Constructor and Description |
---|
RamJournalRM(Cluster cluster, RamJournalRM.Dependencies deps)
Construct a RAMJournalRM.
|
RamJournalRM(Cluster cluster, RamJournalRM.Dependencies deps, FlashJournalRM jrnlmr)
Construct a RAMJournalRM.
|
Modifier and Type | Method and Description |
---|---|
RamJournalRM.DefaultDependencies |
cloneDependencies(AbstractJournalRM.Dependencies deps)
Clone the Dependencies object.
|
protected long |
encodeTicket(int nFile, long of, int cb)
Encode a file number, offset and length into a "ticket".
|
protected int |
extractFileId(long lTicket)
Extract a file index (a file ID) from the passed ticket.
|
protected int |
extractLength(long lTicket)
Extract a file offset from the passed ticket.
|
protected long |
extractOffset(long lTicket)
Extract a file offset from the passed ticket.
|
int |
getBacklogCount()
Determine the number of serialized values that have not yet been persisted to disk.
|
int |
getBacklogSize()
Determine the total size in bytes of the serialized values that have not yet been persisted to disk.
|
protected RamJournalRM.BufferPool |
getBufferPool()
Obtain the BufferPool instance.
|
int |
getBufferSize()
Determine the size of the buffers used to write a chunk of data at a time to an underlying journal file.
|
double |
getCollectorLoadFactor()
Determine the load factor threshold at which files become eligible for garbage collection (compaction).
|
RamJournalRM.Dependencies |
getDependencies()
Return the Dependencies object.
|
protected String |
getDescription()
Format the object attributes into a String for inclusion in the String returned from the
AbstractJournalRM.toString() method. |
protected long |
getEvacuationMask()
Obtain the bit mask that is used to identify tickets that need to be evacuated for a particular file id.
|
protected RamJournalRM.FlashConsumer |
getFlashConsumer()
Obtain the FlashConsumer object used to read/write flash.
|
protected Journal |
getFlashJournal()
Obtain the Journal used to read/write flash.
|
FlashJournalRM |
getFlashJournalRM()
Obtain the FlashJournalRM used to store large values or whatever values don't fit in the configured amount of RAM.
|
int |
getHighFileCount()
Determine the high file count for this Journal.
|
protected RamJournalRM.JournalFile |
getJournalFile(int nFileId)
Obtain a JournalFile by its ID.
|
int |
getMaxBacklogSize()
Determine the maximum allowable size, in bytes, of the backlog; when the backlog reaches this level, writes are delayed until the backlog drops below its maximum.
|
protected int |
getMaxJournalFiles()
Determine the maximum number of journal files.
|
long |
getMaxPoolSize()
Determine the maximum size (in bytes) of the buffers that can be held by the pool.
|
long |
getMaxTotalRam()
Determine the total amount, in bytes, of RAM that will be used for the Journal.
|
protected long |
getMinCollectorSleepMillis()
Determine the minimum sleep cycle between collections.
|
protected String |
getName()
Returns the name value to be used in MBean Objectname key "name".
|
int |
getPoolSize()
Determine the size (in bytes) of the buffers that are currently available in the pool.
|
protected AbstractJournalRM.JournalFile |
getSurvivorFile()
Return a
AbstractJournalRM.JournalFile based on the context of the calling thread or null if it is determined that an exhaustive evacuation will not reclaim sufficient memory. |
protected String |
getTicketDescription(long lTicket)
Format the information encoded in a ticket into a debug string.
|
protected RamJournalRM.BufferPool |
instantiateBufferPool()
Factory: Instantiate a pool of buffers.
|
protected RamJournalRM.FlashConsumer |
instantiateConsumer()
Factory: Instantiate a FlashConsumer object.
|
protected RamJournalRM.JournalImpl |
instantiateJournal()
Factory: Instantiate a JournalImpl object.
|
protected RamJournalRM.JournalFile |
instantiateJournalFile(int nFile)
Factory: Instantiate a JournalFile or subclass thereof.
|
protected boolean |
isCompact(long lTicket)
Determine if the ticket is in the compact form.
|
protected boolean |
isDedupEnabled()
Determine if this journal resource manager should de-dup the keys that its JournalBinaryStore instances are managing.
|
protected boolean |
isFlash(long lTicket)
Determine if the ticket is neither in compact or RAM form.
|
boolean |
isNioRam()
Determine if the journal will use direct buffers (NIO RAM) instead of on-heap buffers (byte arrays).
|
protected boolean |
isRam(long lTicket)
Determine if the ticket is in the RAM form.
|
protected boolean |
isSingleEvacuation()
Determine if this journal resource manager should only evacuate one single JournalFile (at the most) per collection cycle.
|
protected void |
onDependencies(AbstractJournalRM.Dependencies deps)
Process the Dependencies after they have been injected into this object.
|
protected boolean |
shouldNotifyCollector()
Check if the Collector daemon needs to be notified to come out of sleep
|
protected void |
startThreads()
Create and start the various threads used by this Journal Resource Manager.
|
void |
stop()
Hard-stop the controllable service.
|
calculateCurrentLoadFactor, close, compact, configure, createBinaryStore, createJournal, destroyBinaryStore, dispose, encodeTicket, ensureCurrentJournalFile, extractBinary, getBinaryStoreCount, getCluster, getCollectorDaemon, getCollectorTimeout, getCompactionCount, getContextClassLoader, getCurrentCollectorLoadFactor, getExhaustiveCompactionCount, getExhaustiveCompactionTime, getFileCount, getGuardian, getHighestLoadFactor, getMaxCollectorSleepMillis, getMaxFileSize, getMaxJournalFilesNumber, getMaxJournalSize, getMaxValueSize, getState, getStateDescription, getTotalDataSize, getTotalFileSize, instantiateCollectorDaemon, isRunning, iterateJournalFiles, iterateJournals, registerJournal, registerMBean, resetStatistics, setContextClassLoader, setState, shutdown, start, stopThreads, toString, unregisterJournal, unregisterMBean
protected static final int SHIFT_RAM_FLAG
protected static final long MASK_RAM_FLAG
The RAM flag is the bit that signifies that the ticket was produced by the RAM Journal Resource Manager, as opposed to either a "real" compact ticket or a delegated flash ticket.
protected static final int SHIFT_FILE_ID
protected static final long MASK_FILE_ID
protected static final int SHIFT_OFFSET
protected static final long MASK_OFFSET
protected static final int SHIFT_LENGTH
protected static final long MASK_LENGTH
protected static final String TYPE_NAME
protected RamJournalRM.BufferPool m_pool
protected FlashJournalRM m_jrnlrm
protected RamJournalRM.FlashConsumer m_flash
public RamJournalRM(Cluster cluster, RamJournalRM.Dependencies deps)
cluster
- the Cluster
for which the RamJournalRM
is storing datadeps
- the Dependencies objectpublic RamJournalRM(Cluster cluster, RamJournalRM.Dependencies deps, FlashJournalRM jrnlmr)
cluster
- the Cluster
for which the RamJournalRM
is storing datadeps
- the Dependencies objectjrnlmr
- the Flash Journal objectpublic void stop()
Controllable.shutdown()
for normal service termination. Calling this method for a service that has already stopped has no effect.stop
in interface Controllable
stop
in class AbstractJournalRM
public int getBacklogCount()
This property is specific to a FlashJournalRM
implementation.
public int getBacklogSize()
This property is specific to a FlashJournalRM
implementation.
public int getMaxBacklogSize()
This property is specific to a FlashJournalRM
implementation.
public int getPoolSize()
This property is specific to a FlashJournalRM
implementation.
public long getMaxTotalRam()
This property is specific to a RamJournalRM
implementation.
public boolean isNioRam()
This property is specific to a RamJournalRM
implementation.
public long getMaxPoolSize()
public int getBufferSize()
This property is specific to a FlashJournalRM
implementation.
public int getHighFileCount()
This property is specific to a FlashJournalRM
implementation.
public FlashJournalRM getFlashJournalRM()
protected String getName()
getName
in class AbstractJournalRM
public RamJournalRM.Dependencies getDependencies()
getDependencies
in class AbstractJournalRM
public RamJournalRM.DefaultDependencies cloneDependencies(AbstractJournalRM.Dependencies deps)
cloneDependencies
in class AbstractJournalRM
deps
- the populated Dependencies objectprotected void onDependencies(AbstractJournalRM.Dependencies deps)
onDependencies
in class AbstractJournalRM
deps
- the populated Dependencies objectprotected void startThreads()
startThreads
in class AbstractJournalRM
protected String getDescription()
AbstractJournalRM.toString()
method.getDescription
in class AbstractJournalRM
public double getCollectorLoadFactor()
When the portion of released data exceeds (1 - threshold), the file becomes eligible for compaction (garbage collection).
getCollectorLoadFactor
in interface JournalMBean
getCollectorLoadFactor
in class AbstractJournalRM
protected boolean shouldNotifyCollector()
shouldNotifyCollector
in class AbstractJournalRM
protected int getMaxJournalFiles()
getMaxJournalFiles
in class AbstractJournalRM
protected long getMinCollectorSleepMillis()
getMinCollectorSleepMillis
in class AbstractJournalRM
protected boolean isDedupEnabled()
isDedupEnabled
in class AbstractJournalRM
protected boolean isSingleEvacuation()
isSingleEvacuation
in class AbstractJournalRM
protected Journal getFlashJournal()
protected AbstractJournalRM.JournalFile getSurvivorFile()
AbstractJournalRM.JournalFile
based on the context of the calling thread or null if it is determined that an exhaustive evacuation will not reclaim sufficient memory. This method should only be invoked in a "depleted" state when:
non-appending
When called on the CollectorDaemon thread this method returns a normal JournalFile, with the only exception that it will be in excess to the maximum number of permitted journal files and used exclusively by the CollectorDaemon to perform evacuation in a depleted state.
getSurvivorFile
in class AbstractJournalRM
null
may be returned if it is determined that an exhaustive evacuation will not reclaim sufficient memoryprotected RamJournalRM.JournalImpl instantiateJournal()
instantiateJournal
in class AbstractJournalRM
protected RamJournalRM.FlashConsumer instantiateConsumer()
protected RamJournalRM.FlashConsumer getFlashConsumer()
protected RamJournalRM.JournalFile getJournalFile(int nFileId)
getJournalFile
in class AbstractJournalRM
nFileId
- the file id (0-511)protected RamJournalRM.JournalFile instantiateJournalFile(int nFile)
instantiateJournalFile
in class AbstractJournalRM
nFile
- the file number in the range 0-511 (inclusive)protected boolean isCompact(long lTicket)
isCompact
in class AbstractJournalRM
lTicket
- a "ticket" that was created by the Journalprotected boolean isRam(long lTicket)
lTicket
- a "ticket" that was returned previously by the Journalprotected boolean isFlash(long lTicket)
lTicket
- a "ticket" that was returned previously by the Journalprotected long getEvacuationMask()
getEvacuationMask
in class AbstractJournalRM
protected int extractFileId(long lTicket)
extractFileId
in class AbstractJournalRM
lTicket
- a "ticket" that was created by the Journalprotected long extractOffset(long lTicket)
extractOffset
in class AbstractJournalRM
lTicket
- a "ticket" that was created by the Journalprotected int extractLength(long lTicket)
extractLength
in class AbstractJournalRM
lTicket
- a "ticket" that was created by the Journalprotected long encodeTicket(int nFile, long of, int cb)
encodeTicket
in class AbstractJournalRM
nFile
- a file number (aka a file index)of
- a value offsetcb
- a value lengthprotected String getTicketDescription(long lTicket)
getTicketDescription
in class AbstractJournalRM
lTicket
- the ticket valueprotected RamJournalRM.BufferPool instantiateBufferPool()
protected RamJournalRM.BufferPool getBufferPool()