|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.sun.jini.mercury.PersistentEventLog
class PersistentEventLog
Class that implements the interface for an EventLog. This class encapsulates the details of reading/writing events from/to some underlying persistence mechanism. This class makes certain assumptions. First, the next and remove methods are intended to be called in pairs. If remove is not called, then subsequent calls to next will attempt to return the same object. Calling remove essentially advances the read pointer to the next object, if any. Second, if any IOExceptions are encountered during the reading or writing of an event the associated read/write pointer is advanced past the offending event. This means that events can be lost if I/O errors are encountered.
Field Summary | |
---|---|
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 Summary | |
---|---|
PersistentEventLog(Uuid uuid,
File logDir)
Simple constructor that takes a Uuid argument and a File argument. |
Method Summary | |
---|---|
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. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
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
Constructor Detail |
---|
PersistentEventLog(Uuid uuid, File logDir)
IllegalArgumentException
- if any of the arguments are nullMethod Detail |
---|
public 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 occurs
ClassNotFoundException
- 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 return
IOException
- if an I/O error occurs
ClassNotFoundException
- 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 valid
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |