class PersistentEventLog extends Object implements EventLog
Modifier and Type | Field and Description |
---|---|
private boolean |
closed
Flag that is used to determine whether or not this object
has been closed.
|
private File |
controlFile
The File object that will maintain the control data for
for this EventLog.
|
private static int |
CTLBLOCK_LEN
Size of control data file: 4 longs * 8 bytes per long
|
private byte[] |
ctlbuf
The in memory buffer that holds the control data
|
private static String |
CTLFILE_SUFFIX
File suffix for the control file
|
private static boolean |
debugState |
private static long |
DEFAULT_EVENTS_PER_LOGFILE
Default number of events per log file, if not overriden by the user
|
(package private) static int |
DEFAULT_STREAM_POOL_SIZE
Default size for the stream pool, if not overriden by the user
|
private EventReader |
eventReader
The EventReader used to retrieve events.
|
private static long |
eventsPerLogFile
Maximum number of event objects per log file.
|
private EventWriter |
eventWriter
The EventWriter used to store events
|
private boolean |
initialized
Flag that is used to determine whether or not this object
has been initialized.
|
private File |
logDir
The File object of the event persistence directory
|
private static String |
LOGFILE_SUFFIX
File suffix for the log files
|
private static int |
maxPoolSize
Maximum limit for the number of concurrent LogStreams
that this pool will concurrently manage.
|
private long |
nextReadPos
The read offset of the next event.
|
private static Logger |
persistenceLogger
Logger used for persistence-related debugging messages
|
private long |
rcount
The current number of read events.
|
private long |
rpos
The read offset into the current "read" log of the
"last read" object.
|
private static StreamPool |
streamPool
The StreamPool reference to be used for all
instances of EventLog.
|
private Uuid |
uuid
The associated Uuid for this EventLog.
|
private long |
wcount
The current number of written events.
|
private long |
wpos
The current write offset into the current "write" log.
|
Constructor and Description |
---|
PersistentEventLog(Uuid uuid,
File logDir)
Simple constructor that takes a Uuid argument
and a File argument.
|
Modifier and Type | Method and Description |
---|---|
void |
add(RemoteEvent event)
Writes the given RemoteEvent to the underlying
storage mechanism, if possible.
|
private void |
assertInvariants()
Utility method for asserting that the object invariants are valid.
|
void |
close()
Close this log and release any associated runtime resources.
|
void |
delete()
Delete associated storage resources for this log.
|
private File |
getControlFile()
Utility method for returning the File that contains the
state information for this log.
|
private File |
getLogFile(long lognum)
Utility method for returning the File associated with the
given lognum.
|
private static long |
getLogNum(long count)
Utility method for returning the log file number for the given
(event) count.
|
void |
init()
Initializes the state of this EventLog object.
|
boolean |
isEmpty()
Returns true if this log contains no events and
false otherwise.
|
void |
moveAhead(Object cookie)
Effectively removes the last set of read events from the log.
|
RemoteEvent |
next()
Return the next RemoteEvent to be read.
|
private long |
nextReadAheadLog(long readCount)
Advance the temporary "read" state to the next available log.
|
private void |
nextReadLog()
Advance the "read" state to the next available log.
|
private void |
nextWriteLog()
Advance the "write" state to the next available log.
|
private static void |
packLong(long val,
byte[] b,
int off)
Utility method for packing a long into a byte array.
|
private void |
printControlData(Logger logger,
String msg)
Output state information to the given Logger.
|
RemoteEventData[] |
readAhead(int maxEvents)
Return an array of RemoteEventData with a limit of
maxEvents elements.
|
private void |
readControlFile()
Read state information from the underlying store.
|
void |
remove()
Effectively removes the last read event from the log.
|
private static void |
removeDir(File logDir)
Attempt to delete the associated event log persistence directory.
|
private void |
stateCheck()
Asserts that the log is in a valid state.
|
private static long |
unpackLong(byte[] b,
int off)
Utility method for unpacking a long from a byte array.
|
private boolean |
verifyInvariants()
Utility method for checking if the object invariants are valid.
|
private void |
writeControlFile()
Write state information to the underlying store.
|
private static final Logger persistenceLogger
private static final int CTLBLOCK_LEN
private static final String CTLFILE_SUFFIX
private static final String LOGFILE_SUFFIX
private static final long DEFAULT_EVENTS_PER_LOGFILE
private static final long eventsPerLogFile
static final int DEFAULT_STREAM_POOL_SIZE
private static final int maxPoolSize
private static final StreamPool streamPool
private Uuid uuid
private long wcount
private long rcount
private long wpos
private long rpos
private long nextReadPos
private EventReader eventReader
private EventWriter eventWriter
private File logDir
private File controlFile
private byte[] ctlbuf
private boolean initialized
private boolean closed
private static final boolean debugState
PersistentEventLog(Uuid uuid, File logDir)
IllegalArgumentException
- if any of the arguments are nullpublic void init() throws IOException
EventLog
init
in interface EventLog
IOException
- if an I/O error occurspublic void add(RemoteEvent event) throws IOException
EventLog
add
in interface EventLog
IOException
- if an I/O error occurspublic RemoteEvent next() throws IOException, ClassNotFoundException
EventLog
next
in interface EventLog
IOException
- if an I/O error occursClassNotFoundException
- if a class for the serialized
object could not be foundpublic RemoteEventData[] readAhead(int maxEvents) throws IOException, ClassNotFoundException
EventLog
readAhead
in interface EventLog
maxEvents
- maximum number of events/elements to returnIOException
- if an I/O error occursClassNotFoundException
- if a class for the serialized
object could not be foundpublic boolean isEmpty() throws IOException
EventLog
isEmpty
in interface EventLog
IOException
public void remove() throws IOException
EventLog
remove
in interface EventLog
IOException
public void moveAhead(Object cookie) throws IOException
EventLog
moveAhead
in interface EventLog
cookie
- object associated with event to read past. This object
should have been obtained from a call to
getCookie()
on a RemoteEventData
object
obtained from a call to readAhead
on this event log.IOException
- if there was a problem advancing the read pointer.public void close() throws IOException
EventLog
close
in interface EventLog
IOException
public void delete() throws IOException
EventLog
delete
in interface EventLog
IOException
- if an IO error occursprivate static void removeDir(File logDir)
private void nextReadLog()
private long nextReadAheadLog(long readCount)
private void nextWriteLog()
private void printControlData(Logger logger, String msg)
private void writeControlFile() throws IOException
IOException
private void readControlFile() throws IOException
IOException
private static void packLong(long val, byte[] b, int off)
private static long unpackLong(byte[] b, int off)
private File getLogFile(long lognum)
private File getControlFile()
private static long getLogNum(long count)
private void stateCheck() throws IOException
IOException
- if the log is in an invalid stateprivate boolean verifyInvariants()
private void assertInvariants()
InternalMailboxException
- if the invariants aren't validCopyright 2007-2013, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions.