mLog.info("Redo log rollover finished");
mLog.debug("Redo log rollover finished");
	protected File rollover(boolean force, boolean skipCheckpoint) {        File rolledOverFile = null;        // Grab a write lock on mRWLock.  No thread will be        // able to log a new item until rollover is done.		Sync writeLock = mRWLock.writeLock();		try {			writeLock.acquire();		} catch (InterruptedException e) {            if (!mShuttingDown)    			mLog.error("InterruptedException during log rollover", e);            else                mLog.debug("Rollover interrupted during shutdown");			return rolledOverFile;		}		try {			if (isRolloverNeeded(force)) {				mLog.info("Redo log rollover started");                if (!skipCheckpoint)    				checkpoint();				synchronized (mActiveOps) {                    rolledOverFile = mLogWriter.rollover(mActiveOps);					mInitialLogSize = mLogWriter.getSize();				}				mLog.info("Redo log rollover finished");			}		} catch (IOException e) {			mLog.error("IOException during redo log rollover");			signalFatalError(e);		} finally {			writeLock.release();		}        /* TODO: Finish implementing Rollover as a replicated op.         * Checking in this partial code to work on something else.        if (rolledOverFile != null) {            mLog.info("Rollover: " + rolledOverFile.getName());            // Log rollover marker to redolog stream.            Rollover ro = new Rollover(rolledOverFile);            ro.start(System.currentTimeMillis());            logOnly(ro, false); // Don't call log() as it may call rollover() in infinite loop.            CommitTxn commit = new CommitTxn(ro);            logOnly(commit, true);        }        */		return rolledOverFile;	}