com.sleepycat.je.log
Class LogManager

java.lang.Object
  extended by com.sleepycat.je.log.LogManager
Direct Known Subclasses:
LatchedLogManager, SyncedLogManager

public abstract class LogManager
extends java.lang.Object

The LogManager supports reading and writing to the JE log.


Field Summary
protected  EnvironmentImpl envImpl
           
protected  com.sleepycat.je.log.LogBufferPool logBufferPool
           
protected  Latch logWriteLatch
           
 
Constructor Summary
LogManager(EnvironmentImpl envImpl, boolean readOnly)
          There is a single log manager per database environment.
 
Method Summary
abstract  void countObsoleteDb(DatabaseImpl db)
           
abstract  void countObsoleteINs(java.util.List<java.lang.Long> lsnList, DatabaseImpl nodeDb)
          Counts the given obsolete IN LSNs under the log write latch.
abstract  void countObsoleteNode(long lsn, LogEntryType type, int size, DatabaseImpl nodeDb)
          Count node as obsolete under the log write latch.
 void flush()
          Flush all log entries, fsync the log file.
 void flushNoSync()
          May be used to avoid sync to speed unit tests.
 java.lang.Object get(long lsn)
          Fault in the first object in the log entry log entry at this LSN.
 java.nio.ByteBuffer getByteBufferFromLog(long lsn)
          Return a ByteBuffer holding the log entry at this LSN.
 boolean getChecksumOnRead()
           
 long getLastLsnAtRecovery()
           
 LogEntry getLogEntry(long lsn)
          Instantiate all the objects in the log entry at this LSN.
 LogSource getLogSource(long lsn)
          Find the LSN, whether in a file or still in the log buffers.
abstract  TrackedFileSummary getUnflushableTrackedSummary(long file)
          Returns a tracked summary for the given file which will not be flushed.
abstract  void loadEndOfLogStat(EnvironmentStats stats)
           
 void loadStats(StatsConfig config, EnvironmentStats stats)
           
 long log(LogEntry entry, boolean isProvisional, boolean backgroundIO, long oldNodeLsn, DatabaseImpl nodeDb, ReplicationContext repContext)
          Write a log entry.
 long log(LogEntry entry, Provisional provisional, boolean backgroundIO, long oldNodeLsn, DatabaseImpl nodeDb, ReplicationContext repContext)
          Write a log entry.
 long log(LogEntry entry, ReplicationContext repContext)
          Write a log entry.
 void log(LogItem item, LogContext context)
          Convenience method for logging a single entry.
 long logForceFlip(LogEntry entry)
          Log this single object and force a flip of the log files.
 long logForceFlush(LogEntry entry, boolean fsyncRequired, ReplicationContext repContext)
          Log this single object and force a write of the log files.
 java.nio.ByteBuffer marshallIntoBuffer(LogEntryHeader header, LogEntry entry)
          Serialize a loggable object into this buffer.
 void multiLog(LogItem[] itemArray, LogContext context)
           
abstract  boolean removeDbFileSummary(DatabaseImpl db, java.lang.Long fileNum)
           
abstract  void removeTrackedFile(TrackedFileSummary tfs)
          Removes the tracked summary for the given file.
protected  void removeTrackedFileInternal(TrackedFileSummary tfs)
           
 void resetPool(DbConfigManager configManager)
          Reset the pool when the cache is resized.
 void setLastLsnAtRecovery(long lastLsnAtRecovery)
           
 void setReadHook(TestHook hook)
           
abstract  void transferToUtilizationTracker(LocalUtilizationTracker localTracker)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logBufferPool

protected com.sleepycat.je.log.LogBufferPool logBufferPool

logWriteLatch

protected Latch logWriteLatch

envImpl

protected EnvironmentImpl envImpl
Constructor Detail

LogManager

public LogManager(EnvironmentImpl envImpl,
                  boolean readOnly)
           throws DatabaseException
There is a single log manager per database environment.

Throws:
DatabaseException
Method Detail

getChecksumOnRead

public boolean getChecksumOnRead()

getLastLsnAtRecovery

public long getLastLsnAtRecovery()

setLastLsnAtRecovery

public void setLastLsnAtRecovery(long lastLsnAtRecovery)

resetPool

public void resetPool(DbConfigManager configManager)
               throws DatabaseException
Reset the pool when the cache is resized. This method is called after the memory budget has been calculated.

Throws:
DatabaseException

logForceFlush

public long logForceFlush(LogEntry entry,
                          boolean fsyncRequired,
                          ReplicationContext repContext)
                   throws DatabaseException
Log this single object and force a write of the log files.

Parameters:
entry - object to be logged
fsyncRequired - if true, log files should also be fsynced.
Returns:
LSN of the new log entry
Throws:
DatabaseException

logForceFlip

public long logForceFlip(LogEntry entry)
                  throws DatabaseException
Log this single object and force a flip of the log files.

Parameters:
entry - object to be logged
Returns:
LSN of the new log entry
Throws:
DatabaseException

log

public long log(LogEntry entry,
                ReplicationContext repContext)
         throws DatabaseException
Write a log entry.

Parameters:
entry - object to be logged
Returns:
LSN of the new log entry
Throws:
DatabaseException

log

public long log(LogEntry entry,
                boolean isProvisional,
                boolean backgroundIO,
                long oldNodeLsn,
                DatabaseImpl nodeDb,
                ReplicationContext repContext)
         throws DatabaseException
Write a log entry.

Parameters:
entry - object to be logged
isProvisional - true if this entry should not be read during recovery.
backgroundIO - if true, sleep when the backgroundIOLimit is exceeded.
oldNodeLsn - is the previous version of the node to be counted as obsolete, or NULL_LSN if the entry is not a node or has no old LSN.
nodeDb - database of the node, or null if entry is not a node.
Returns:
LSN of the new log entry
Throws:
DatabaseException

log

public long log(LogEntry entry,
                Provisional provisional,
                boolean backgroundIO,
                long oldNodeLsn,
                DatabaseImpl nodeDb,
                ReplicationContext repContext)
         throws DatabaseException
Write a log entry.

Parameters:
entry - object to be logged
provisional - whether this entry should be processed during recovery.
backgroundIO - if true, sleep when the backgroundIOLimit is exceeded.
oldNodeLsn - is the previous version of the node to be counted as obsolete, or NULL_LSN if the entry is not a node or has no old LSN.
nodeDb - database of the node, or null if entry is not a node.
Returns:
LSN of the new log entry
Throws:
DatabaseException

log

public void log(LogItem item,
                LogContext context)
         throws DatabaseException
Convenience method for logging a single entry.

Throws:
DatabaseException

multiLog

public void multiLog(LogItem[] itemArray,
                     LogContext context)
              throws DatabaseException
Throws:
DatabaseException

marshallIntoBuffer

public java.nio.ByteBuffer marshallIntoBuffer(LogEntryHeader header,
                                              LogEntry entry)
                                       throws DatabaseException
Serialize a loggable object into this buffer. (public for unit tests.

Throws:
DatabaseException

getLogEntry

public LogEntry getLogEntry(long lsn)
                     throws DatabaseException
Instantiate all the objects in the log entry at this LSN.

Parameters:
lsn - location of entry in log.
Returns:
log entry that embodies all the objects in the log entry.
Throws:
DatabaseException

getByteBufferFromLog

public java.nio.ByteBuffer getByteBufferFromLog(long lsn)
                                         throws DatabaseException
Return a ByteBuffer holding the log entry at this LSN. The log entry must begin at position 0, to mimic the marshalledBuffer used in logInternal().

Parameters:
lsn - location of entry in log
Returns:
log entry that embodies all the objects in the log entry
Throws:
DatabaseException

get

public java.lang.Object get(long lsn)
                     throws DatabaseException
Fault in the first object in the log entry log entry at this LSN.

Parameters:
lsn - location of object in log
Returns:
the object in the log
Throws:
DatabaseException

getLogSource

public LogSource getLogSource(long lsn)
                       throws DatabaseException
Find the LSN, whether in a file or still in the log buffers. Is public for unit testing.

Throws:
DatabaseException

flush

public void flush()
           throws DatabaseException
Flush all log entries, fsync the log file.

Throws:
DatabaseException

flushNoSync

public void flushNoSync()
                 throws DatabaseException
May be used to avoid sync to speed unit tests.

Throws:
DatabaseException

loadStats

public void loadStats(StatsConfig config,
                      EnvironmentStats stats)
               throws DatabaseException
Throws:
DatabaseException

getUnflushableTrackedSummary

public abstract TrackedFileSummary getUnflushableTrackedSummary(long file)
                                                         throws DatabaseException
Returns a tracked summary for the given file which will not be flushed. Used for watching changes that occur while a file is being cleaned.

Throws:
DatabaseException

removeTrackedFile

public abstract void removeTrackedFile(TrackedFileSummary tfs)
                                throws DatabaseException
Removes the tracked summary for the given file.

Throws:
DatabaseException

removeTrackedFileInternal

protected void removeTrackedFileInternal(TrackedFileSummary tfs)

countObsoleteNode

public abstract void countObsoleteNode(long lsn,
                                       LogEntryType type,
                                       int size,
                                       DatabaseImpl nodeDb)
                                throws DatabaseException
Count node as obsolete under the log write latch. This is done here because the log write latch is managed here, and all utilization counting must be performed under the log write latch.

Throws:
DatabaseException

transferToUtilizationTracker

public abstract void transferToUtilizationTracker(LocalUtilizationTracker localTracker)
                                           throws DatabaseException
Throws:
DatabaseException
See Also:
BaseLocalUtilizationTracker.transferToUtilizationTracker(com.sleepycat.je.cleaner.UtilizationTracker)

countObsoleteINs

public abstract void countObsoleteINs(java.util.List<java.lang.Long> lsnList,
                                      DatabaseImpl nodeDb)
                               throws DatabaseException
Counts the given obsolete IN LSNs under the log write latch.

Throws:
DatabaseException

countObsoleteDb

public abstract void countObsoleteDb(DatabaseImpl db)
                              throws DatabaseException
Throws:
DatabaseException
See Also:
DatabaseImpl.countObsoleteDb(com.sleepycat.je.cleaner.BaseUtilizationTracker, long)

removeDbFileSummary

public abstract boolean removeDbFileSummary(DatabaseImpl db,
                                            java.lang.Long fileNum)
                                     throws DatabaseException
Throws:
DatabaseException

loadEndOfLogStat

public abstract void loadEndOfLogStat(EnvironmentStats stats)
                               throws DatabaseException
Throws:
DatabaseException

setReadHook

public void setReadHook(TestHook hook)