You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2011/10/24 19:12:02 UTC
svn commit: r1188237 - in /directory/apacheds/branches/apacheds-txns:
core-api/src/main/java/org/apache/directory/server/core/log/
core/src/main/java/org/apache/directory/server/core/log/
core/src/test/java/org/apache/directory/server/core/log/
Author: elecharny
Date: Mon Oct 24 17:12:01 2011
New Revision: 1188237
URL: http://svn.apache.org/viewvc?rev=1188237&view=rev
Log:
o Added some toString() methods
o Removed the LogFileManager.init() method, use the constructor instead
o Added some javadoc in DefaultLogFileManager
o The Reader/Writer classes in LogFileManager now create the randomAccessFile internally
o Closed the RAF after having truncated it
o Some minor refactoring
Modified:
directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/Log.java
directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/LogAnchor.java
directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/UserLogRecord.java
directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLog.java
directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogFileManager.java
directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogScanner.java
directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFileManager.java
directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFlushManager.java
directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogManager.java
directory/apacheds/branches/apacheds-txns/core/src/test/java/org/apache/directory/server/core/log/LogFlushScanTest.java
Modified: directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/Log.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/Log.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/Log.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/Log.java Mon Oct 24 17:12:01 2011
@@ -27,7 +27,6 @@ import java.io.IOException;
*/
public interface Log
{
-
/**
* Initializes the logging subsystem
*
Modified: directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/LogAnchor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/LogAnchor.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/LogAnchor.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/LogAnchor.java Mon Oct 24 17:12:01 2011
@@ -84,19 +84,19 @@ public class LogAnchor
public long getLogFileNumber()
{
- return this.logFileNumber;
+ return logFileNumber;
}
public long getLogFileOffset()
{
- return this.logFileOffset;
+ return logFileOffset;
}
public long getLogLSN()
{
- return this.logLSN;
+ return logLSN;
}
Modified: directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/UserLogRecord.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/UserLogRecord.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/UserLogRecord.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-api/src/main/java/org/apache/directory/server/core/log/UserLogRecord.java Mon Oct 24 17:12:01 2011
@@ -70,6 +70,6 @@ public class UserLogRecord
*/
public String toString()
{
- return "Length: " + length + ", offset: " + offset + ", anchor: " + logAnchor;
+ return "Length: " + length + ", offset: " + offset + ", anchor: {" + logAnchor + "}";
}
}
Modified: directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLog.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLog.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLog.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLog.java Mon Oct 24 17:12:01 2011
@@ -42,8 +42,7 @@ public class DefaultLog implements Log
*/
public void init( String logFilepath, String suffix, int logBufferSize, long logFileSize ) throws IOException, InvalidLogException
{
- logFileManager = new DefaultLogFileManager();
- logFileManager.init( logFilepath, suffix );
+ logFileManager = new DefaultLogFileManager( logFilepath, suffix );
logManager = new LogManager( logFileManager );
logManager.initLogManager();
Modified: directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogFileManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogFileManager.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogFileManager.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogFileManager.java Mon Oct 24 17:12:01 2011
@@ -27,25 +27,28 @@ import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
/**
- *
+ * Creates and manages a LogFile on disk. The file name is the concatenation of a
+ * path on disk, and of a suffix.<br/>
+ * Each log file has a name like <b>logFileName/log_<logFileNumber>.suffix</b>
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
-/** Package protected */ class DefaultLogFileManager implements LogFileManager
+class DefaultLogFileManager implements LogFileManager
{
- /** TODO: doco */
+ /** The Log file path */
private String logFilePath;
- /** TODO: doco */
+ /** The Log file suffix */
private String suffix;
/**
- * Inits the log file manager to use the given logfile path and the suffix. Each log file
+ * Creates a log file manager to use the given logfile path and the suffix. Each log file
* has name logFileName_<logFileNumber>.suffix
*
* @param logFilepath log file path
* @param suffix suffix for log file.
*/
- public void init( String logFilePath, String suffix )
+ public DefaultLogFileManager( String logFilePath, String suffix )
{
this.logFilePath = logFilePath;
this.suffix = suffix;
@@ -59,10 +62,7 @@ import java.io.RandomAccessFile;
{
File logFile = makeLogFileName( logFileNumber );
- // This will throw a file not found exception if file does not exist
- RandomAccessFile raf = new RandomAccessFile( logFile, "r" );
-
- return new LogFileReader( raf, logFileNumber );
+ return new LogFileReader( logFile, logFileNumber );
}
@@ -73,10 +73,7 @@ import java.io.RandomAccessFile;
{
File logFile = makeLogFileName( logFileNumber );
- // This will throw a file not found exception if file does not exist
- RandomAccessFile raf = new RandomAccessFile( logFile, "rw" );
-
- return new LogFileWriter( raf, logFileNumber );
+ return new LogFileWriter( logFile, logFileNumber );
}
@@ -87,6 +84,7 @@ import java.io.RandomAccessFile;
{
File logFile = makeLogFileName( logFileNumber );
+ // Create the files, unless it already exists.
boolean fileAlreadyExists = !logFile.createNewFile();
return fileAlreadyExists;
@@ -108,8 +106,10 @@ import java.io.RandomAccessFile;
// This will throw a file not found exception if file does not exist
RandomAccessFile raf = new RandomAccessFile( logFile, "rw" );
+ // Now, truncate the file for real
raf.setLength( size );
raf.getFD().sync();
+ raf.close();
}
@@ -131,16 +131,23 @@ import java.io.RandomAccessFile;
{
File oldLogFile = makeLogFileName( originalLogFileNumber );
boolean result = oldLogFile.renameTo( makeLogFileName( newLongFileNumber ) );
+
return result;
}
-
+ /**
+ * Creates a log file name using the path, the prefix and the suffix
+ */
private File makeLogFileName( long logFileNumber )
{
return new File( logFilePath + File.separatorChar + LogFileManager.LOG_NAME_PREFIX + logFileNumber + "." + suffix );
}
- static class LogFileReader implements LogFileManager.LogFileReader
+
+ /**
+ * An implementation of the {@link LogFileManager.LogFileReader} interface.
+ */
+ private class LogFileReader implements LogFileManager.LogFileReader
{
/** Underlying log file */
RandomAccessFile raf;
@@ -149,21 +156,28 @@ import java.io.RandomAccessFile;
long logFileNumber;
- public LogFileReader( RandomAccessFile raf, long logFileNumber )
+ public LogFileReader( File logFile, long logFileNumber ) throws FileNotFoundException
{
- this.raf = raf;
+ // This will throw a file not found exception if file does not exist
+ raf = new RandomAccessFile( logFile, "r" );
+
this.logFileNumber = logFileNumber;
}
+
/**
* {@inheritDoc}
*/
public int read( byte[] buffer, int offset, int length ) throws IOException, EOFException
{
+ // carefully read all the bytes from disk. Don't use read(), as
+ // it does not span across blocks of data
raf.readFully( buffer, offset, length );
+
return length;
}
+
/**
* {@inheritDoc}
*/
@@ -172,6 +186,7 @@ import java.io.RandomAccessFile;
raf.seek( position );
}
+
/**
* {@inheritDoc}
*/
@@ -189,6 +204,7 @@ import java.io.RandomAccessFile;
return logFileNumber;
}
+
/**
* {@inheritDoc}
*/
@@ -197,6 +213,7 @@ import java.io.RandomAccessFile;
return raf.length();
}
+
/**
* {@inheritDoc}
*/
@@ -204,10 +221,22 @@ import java.io.RandomAccessFile;
{
return raf.getFilePointer();
}
+
+
+ /**
+ * @see Object#toString()
+ */
+ public String toString()
+ {
+ return "FileReader(" + raf + ", " + logFileNumber + ")";
+ }
}
- static class LogFileWriter implements LogFileManager.LogFileWriter
+ /**
+ * An implementation of the {@link LogFileManager.LogFileWriter} interface.
+ */
+ private class LogFileWriter implements LogFileManager.LogFileWriter
{
/** Underlying log file */
RandomAccessFile raf;
@@ -216,11 +245,23 @@ import java.io.RandomAccessFile;
long logFileNumber;
- public LogFileWriter( RandomAccessFile raf, long logFileNumber )
- {
- this.raf = raf;
+ /**
+ * Creates an instance of a LogFileWriter
+ *
+ * @param raf The file
+ * @param logFileNumber The file's number
+ *
+ * @throws FileNotFoundException If the file can't be found
+ */
+ public LogFileWriter( File logFile, long logFileNumber ) throws FileNotFoundException
+ {
+ // This will throw a file not found exception if file does not exist
+ raf = new RandomAccessFile( logFile, "rw" );
+
this.logFileNumber = logFileNumber;
}
+
+
/**
* {@inheritDoc}
*/
@@ -229,6 +270,7 @@ import java.io.RandomAccessFile;
raf.write( buffer, offset, length );
}
+
/**
* {@inheritDoc}
*/
@@ -237,6 +279,7 @@ import java.io.RandomAccessFile;
raf.getFD().sync();
}
+
/**
* {@inheritDoc}
*/
@@ -245,6 +288,7 @@ import java.io.RandomAccessFile;
raf.close();
}
+
/**
* {@inheritDoc}
*/
@@ -253,6 +297,7 @@ import java.io.RandomAccessFile;
return logFileNumber;
}
+
/**
* {@inheritDoc}
*/
@@ -261,6 +306,7 @@ import java.io.RandomAccessFile;
return raf.length();
}
+
/**
* {@inheritDoc}
*/
@@ -268,6 +314,15 @@ import java.io.RandomAccessFile;
{
raf.seek( position );
}
+
+
+ /**
+ * @see Object#toString()
+ */
+ public String toString()
+ {
+ return "FileWriter(" + raf + ", " + logFileNumber + ")";
+ }
}
Modified: directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogScanner.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogScanner.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogScanner.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/DefaultLogScanner.java Mon Oct 24 17:12:01 2011
@@ -78,7 +78,7 @@ public class DefaultLogScanner implement
/**
* {@inheritDoc}
*/
- public boolean getNextRecord(UserLogRecord logRecord) throws IOException, InvalidLogException
+ public boolean getNextRecord( UserLogRecord logRecord ) throws IOException, InvalidLogException
{
boolean startingRead = false;
@@ -119,7 +119,7 @@ public class DefaultLogScanner implement
}
startingRead = true;
- }
+ }
while ( true )
{
@@ -169,7 +169,6 @@ public class DefaultLogScanner implement
// Read and verify footer
readRecordFooter();
-
// If we are here, then we successfully read the log record.
// Set the read record's position, uptate last read good location
// and then return
Modified: directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFileManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFileManager.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFileManager.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFileManager.java Mon Oct 24 17:12:01 2011
@@ -34,16 +34,6 @@ import java.io.FileNotFoundException;
final static String LOG_NAME_PREFIX = "log_";
/**
- * Inits the log file manager to use the given logfile path and the suffix. Each log file
- * has name logFileName_<logFileNumber>.suffix
- *
- * @param logFilepath log file path
- * @param suffix suffix for log file.
- */
- void init( String logFilepath, String suffix );
-
-
- /**
* Returns a reader for the given log file number
*
* @param logFileNumber identifier of the log file to read
@@ -104,17 +94,20 @@ import java.io.FileNotFoundException;
boolean rename(long orignalLogFileNumber, long newLongFileNumber);
+ /**
+ * An interface defining all the operations a reader can do on a File
+ */
interface LogFileReader
{
/**
- *
* Reads from the file at the current position
*
* @param buffer data destination
* @param offset destination offset
* @param length size of read
* @return number of bytes actually read.
- * @throws IOException
+ * @throws IOException If the read failed
+ * @throws EOFException If the file does not contain enough data
*/
int read( byte[] buffer, int offset, int length ) throws IOException, EOFException;
@@ -122,13 +115,16 @@ import java.io.FileNotFoundException;
/**
* Repositions the reader at the given offset
*
- * @param position
+ * @param position The offset to seek
+ * @throws IOException If the seek operation failed
*/
void seek( long position ) throws IOException;
+
/**
* Close the log file reader and releases the resources
*
+ * @throws IOException If the close failed
*/
void close() throws IOException;
@@ -143,39 +139,48 @@ import java.io.FileNotFoundException;
/**
- * returns the length of the file
+ * @return the length of the file
+ * @throws IOException If the operation failed
*/
long getLength() throws IOException;
/**
- * returns the offset of the next read
+ * @return the offset of the next read
+ * @throws IOException If the operation failed
*/
long getOffset() throws IOException;
}
+
+ /**
+ * An interface defining all the operations a writer can do on a File
+ */
interface LogFileWriter
{
/**
- * Append the given data to the log file
+ * Append the given data to the log file at the given position
*
* @param buffer source of data
* @param offset offset into buffer
* @param length number of bytes to be appended
+ * @throws IOException If we cannot append data to the file
*/
void append( byte[] buffer, int offset, int length ) throws IOException;
/**
- * Sync the file contents to media
- *
+ * Sync the file contents to media
+ *
+ * @throws IOException If we cannot sync on disk
*/
void sync() throws IOException;
/**
* Close the log file reader and releases the resources
- *
+ *
+ * @throws IOException If we cannot close the file
*/
void close() throws IOException;
@@ -190,15 +195,18 @@ import java.io.FileNotFoundException;
/**
- * returns the length of the file
+ * @return the length of the file
+ *
+ * @throws IOException If we cannot return the length
*/
long getLength() throws IOException;
/**
- * Repositions the reader at the given offset
+ * Repositions the reader at the given offset.
*
- * @param position
+ * @param position The new position to set
+ * @throws IOException If we cannot set the position
*/
void seek( long position ) throws IOException;
}
Modified: directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFlushManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFlushManager.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFlushManager.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogFlushManager.java Mon Oct 24 17:12:01 2011
@@ -36,7 +36,7 @@ import org.apache.directory.server.i18n.
*
* Internally it manages a circular buffer where appends initially go. Appends are first
* appended to this in memory circular log. As the in memory circular log fills up or as the user requests
- * memory buffer is flushed to the underlying media.
+ * memory buffer is flushed to the underlying media.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
Modified: directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogManager.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogManager.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogManager.java Mon Oct 24 17:12:01 2011
@@ -51,7 +51,7 @@ import org.apache.directory.server.i18n.
/** buffer used to do IO on controlfile */
private byte controlFileBuffer[] = new byte[CONTROLFILE_RECORD_SIZE];
- /** ByteBuffer used to to IO on checkpoint file */
+ /** ByteBuffer used to IO on checkpoint file */
private ByteBuffer controlFileMarker = ByteBuffer.wrap( controlFileBuffer );
/** Current checkpoint record in memory */
Modified: directory/apacheds/branches/apacheds-txns/core/src/test/java/org/apache/directory/server/core/log/LogFlushScanTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core/src/test/java/org/apache/directory/server/core/log/LogFlushScanTest.java?rev=1188237&r1=1188236&r2=1188237&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core/src/test/java/org/apache/directory/server/core/log/LogFlushScanTest.java (original)
+++ directory/apacheds/branches/apacheds-txns/core/src/test/java/org/apache/directory/server/core/log/LogFlushScanTest.java Mon Oct 24 17:12:01 2011
@@ -56,7 +56,7 @@ public class LogFlushScanTest
/**
* Get the Log folder
*/
- private String getLogFoler( ) throws IOException
+ private String getLogFolder( ) throws IOException
{
String file = folder.newFolder( LOG_SUFFIX ).getAbsolutePath();
@@ -68,7 +68,7 @@ public class LogFlushScanTest
public void setup() throws IOException, InvalidLogException
{
log = new DefaultLog();
- log.init( getLogFoler(), LOG_SUFFIX, logBufferSize, logFileSize );
+ log.init( getLogFolder(), LOG_SUFFIX, logBufferSize, logFileSize );
}