package com.sleepycat.je.log; import java.io.IOException; import java.nio.ByteBuffer; import java.util.List; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.cleaner.TrackedFileSummary; import com.sleepycat.je.cleaner.UtilizationTracker; import com.sleepycat.je.dbi.EnvironmentImpl; import de.ovgu.cide.jakutil.*; /** * The LatchedLogManager uses the latches to implement critical sections. */ public class LatchedLogManager extends LogManager { /** * There is a single log manager per database environment. */ public LatchedLogManager( EnvironmentImpl envImpl, boolean readOnly) throws DatabaseException { super(envImpl,readOnly); } protected LogResult logItem( LoggableObject item, boolean isProvisional, boolean flushRequired, boolean forceNewLogFile, long oldNodeLsn, boolean marshallOutsideLatch, ByteBuffer marshalledBuffer, UtilizationTracker tracker) throws IOException, DatabaseException { logWriteLatch.acquire(); try { return logInternal(item,isProvisional,flushRequired,forceNewLogFile,oldNodeLsn,marshallOutsideLatch,marshalledBuffer,tracker); } finally { logWriteLatch.release(); } } protected void flushInternal() throws LogException, DatabaseException { logWriteLatch.acquire(); try { logBufferPool.writeBufferToFile(0); } catch ( IOException e) { throw new LogException(e.getMessage()); } finally { logWriteLatch.release(); } } /** * @see LogManager#getUnflusableTrackedSummary */ public TrackedFileSummary getUnflushableTrackedSummary( long file) throws DatabaseException { logWriteLatch.acquire(); try { return getUnflushableTrackedSummaryInternal(file); } finally { logWriteLatch.release(); } } /** * @see LogManager#countObsoleteLNs */ public void countObsoleteNode( long lsn, LogEntryType type) throws DatabaseException { UtilizationTracker tracker=envImpl.getUtilizationTracker(); logWriteLatch.acquire(); try { countObsoleteNodeInternal(tracker,lsn,type); } finally { logWriteLatch.release(); } } /** * @see LogManager#countObsoleteNodes */ public void countObsoleteNodes( TrackedFileSummary[] summaries) throws DatabaseException { UtilizationTracker tracker=envImpl.getUtilizationTracker(); logWriteLatch.acquire(); try { countObsoleteNodesInternal(tracker,summaries); } finally { logWriteLatch.release(); } } /** * @see LogManager#countObsoleteINs */ public void countObsoleteINs( List lsnList) throws DatabaseException { logWriteLatch.acquire(); try { countObsoleteINsInternal(lsnList); } finally { logWriteLatch.release(); } } }