protected abstract class AbstractJournalRM.JournalFile extends Object implements Disposable
Modifier and Type | Field and Description |
---|---|
protected AtomicLong |
m_cbReleased
Amount of data that has been released.
|
protected AtomicLong |
m_cbWritten
Amount of data that has been written.
|
protected boolean |
m_fNotifiedFull
Set to true when the JournalFile is notified that it is full and its contents have been fully written.
|
protected AbstractJournalRM.JournalFile |
m_jrnlfileNext
The JournalFile that "comes after" this JournalFile in the journal.
|
protected AtomicLong |
m_lStateOffset
Current state of the JournalFile and the appending offset within the file.
|
protected int |
m_nFile
The file index.
|
static long |
STATE_APPENDING
State: File is being appended to.
|
static long |
STATE_CONGESTION
State: File is appending, but there is congestion forcing a wait by all appending threads.
|
static long |
STATE_DISCARDED
State: File has been discarded.
|
static long |
STATE_EVACUATING
State: Remaining entries in the file are being evacuated.
|
static long |
STATE_FULL
State: File is full and appends are no longer occurring.
|
static long |
STATE_GARBAGE
State: File is garbage and can safely be discarded.
|
static long |
STATE_MASK
The bits of the
m_lStateOffset that are used for the current state of the file (one of the STATE_* constants). |
static long |
STATE_RESERVED
State: File is reserved by the CollectorDaemon.
|
Constructor and Description |
---|
JournalFile(int nFile)
Construct a Journal File.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
compareAndSetOffset(long lPrevValue, long lOffset)
Specify the new offset value of this JournalFile.
|
protected boolean |
compareAndSetState(long lPrevValue, long lState)
Specify the current state of this JournalFile unless the state is
STATE_RESERVED as it is a special case and should be set via setReserved(boolean) . |
abstract void |
dispose()
Invoked when all resources owned by the implementer can safely be released.
|
abstract long |
enqueue(Binary bin)
Enqueue a Binary value to be written to this file, returning a ticket, or return 0L if this file is full and the append has to occur to a new file.
|
void |
evacuate()
Called by the CollectorDaemon to evacuate all remaining data from the JournalFile.
|
long |
getBytesWritten()
Determine the number of bytes written.
|
protected String |
getDescription()
Format the object attributes into a String for inclusion in the String returned from the
toString() method. |
int |
getFileId()
Determine the file id (0-511) for this JournalFile.
|
AbstractJournalRM.JournalFile |
getNextJournalFile()
Determine the JournalFile for the file in the journal that follows the file represented by this JournalFile.
|
long |
getOffset()
Determine the current append offset (or length) of this JournalFile.
|
protected long |
getOffset(long lStateOffset)
Determine the current append offset (or length) from the provided long.
|
long |
getReleased()
Determine the number of bytes that have been released from this JournalFile.
|
long |
getState()
Determine the current state of this JournalFile.
|
protected long |
getState(long lState)
Determine the state of the provided (potentially) unmasked
lState . |
boolean |
isAppending()
Return whether the JournalFile can be appended to.
|
boolean |
isReserved()
Return whether the JournalFile has been reserved thus can not be used by clients.
|
void |
notifyWriteCompleted()
Called by the CollectorDaemon the first time that the JournalFile is encountered in its FULL state and its data has all been written.
|
abstract Binary |
read(long lTicket)
Read the Binary associated with the specified ticket from the journal file.
|
void |
release(int cbValue)
Release the specified number of bytes from this journal file.
|
void |
setNextJournalFile(AbstractJournalRM.JournalFile jrnlfileNext)
Once this file has been filled, it gets a reference to the file that follows it.
|
protected void |
setReserved(boolean fReserved)
Specify whether the current JournalFile is reserved.
|
protected void |
setState(long lState)
Specify the current state of this JournalFile.
|
String |
toString() |
void |
touch()
This method is called periodically by the collector daemon to indicate that the file is still being used.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
close
public static final long STATE_APPENDING
public static final long STATE_CONGESTION
public static final long STATE_FULL
public static final long STATE_EVACUATING
public static final long STATE_GARBAGE
public static final long STATE_DISCARDED
public static final long STATE_RESERVED
public static final long STATE_MASK
m_lStateOffset
that are used for the current state of the file (one of the STATE_* constants).protected final int m_nFile
protected final AtomicLong m_lStateOffset
protected final AtomicLong m_cbWritten
protected final AtomicLong m_cbReleased
protected volatile AbstractJournalRM.JournalFile m_jrnlfileNext
protected boolean m_fNotifiedFull
public JournalFile(int nFile)
nFile
- the file number in the range 0-511 (inclusive)public abstract long enqueue(Binary bin)
bin
- the value to append to the journal filepublic abstract Binary read(long lTicket)
lTicket
- a ticket previously returned from enqueue(com.tangosol.util.Binary)
public void release(int cbValue)
cbValue
- the number of bytes that are being releasedpublic int getFileId()
public long getState()
public long getOffset()
public long getBytesWritten()
public long getReleased()
public boolean isAppending()
public boolean isReserved()
public void touch()
public AbstractJournalRM.JournalFile getNextJournalFile()
public void setNextJournalFile(AbstractJournalRM.JournalFile jrnlfileNext)
jrnlfileNext
- the next file in the journalprotected String getDescription()
toString()
method.public void notifyWriteCompleted()
public void evacuate()
protected void setReserved(boolean fReserved)
fReserved
- whether the JournalFile is reservedpublic abstract void dispose()
Once disposed of the object should no longer be considered to be usable.
Note the Disposable interface is compatible with try-with-resources which will automatically invoke this method.
dispose
in interface Disposable
protected long getState(long lState)
lState
.lState
- the journal file stateprotected void setState(long lState)
lState
- one of the STATE_* constantsprotected boolean compareAndSetState(long lPrevValue, long lState)
STATE_RESERVED
as it is a special case and should be set via setReserved(boolean)
.lPrevValue
- the expected state valuelState
- one of the STATE_* constants, except STATE_RESERVEDprotected boolean compareAndSetOffset(long lPrevValue, long lOffset)
lPrevValue
- the expected state valuelOffset
- the new offset valueprotected long getOffset(long lStateOffset)
lStateOffset
- the long value holding both the state and offset