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 2012/01/05 18:28:50 UTC

svn commit: r1227712 [2/2] - in /directory/apacheds/branches/apacheds-txns/core-shared/src: main/java/org/apache/directory/server/core/shared/ main/java/org/apache/directory/server/core/shared/log/ main/java/org/apache/directory/server/core/shared/part...

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/log/LogManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/log/LogManager.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/log/LogManager.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/log/LogManager.java Thu Jan  5 17:28:50 2012
@@ -19,6 +19,7 @@
  */
 package org.apache.directory.server.core.shared.log;
 
+
 import java.nio.ByteBuffer;
 
 import java.util.concurrent.locks.ReentrantLock;
@@ -38,61 +39,62 @@ import org.apache.directory.server.core.
 
 import org.apache.directory.server.i18n.I18n;
 
+
 /**
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-/* Package protected */ class LogManager
+/* Package protected */class LogManager
 {
     /**  Controlfile record size */
     private final static int CONTROLFILE_RECORD_SIZE = 44;
-    
+
     /**  Controlfile checksum size */
     private final static int CONTROLFILE_CHECKSUM_SIZE = CONTROLFILE_RECORD_SIZE - 8 - 4;
-    
+
     /** Controlfile file magic number */
     private final static int CONTROLFILE_MAGIC_NUMBER = 0xFF11FF11;
-    
+
     /** Controlfile log file number */
     private final static long CONTROLFILE_LOG_FILE_NUMBER = -1;
-    
+
     /** Shadow Controlfile log file number */
     private final static long CONTROLFILE_SHADOW_LOG_FILE_NUMBER = -2;
-    
+
     /** buffer used to do IO on controlfile */
     private byte controlFileBuffer[] = new byte[CONTROLFILE_RECORD_SIZE];
-    
+
     /** ByteBuffer used to IO on checkpoint file */
     private ByteBuffer controlFileMarker = ByteBuffer.wrap( controlFileBuffer );
-    
+
     /** Current checkpoint record in memory */
     private ControlFileRecord controlFileRecord = new ControlFileRecord();
-    
+
     /** Min neeeded point in the log */
     private LogAnchor minLogAnchor = new LogAnchor();
-    
+
     /** Protects minLogAchor */
     private Lock minLogAnchorLock = new ReentrantLock();
-    
+
     /** Log file manager */
     private LogFileManager logFileManager;
-        
+
     /** Log Anchor comparator */
     private LogAnchorComparator anchorComparator = new LogAnchorComparator();
-    
+
     /** Current log file */
     private long currentLogFileNumber;
-    
+
     /** Buffer used to read log file markers */
     private byte markerBuffer[] = new byte[LogFileRecords.LOG_FILE_HEADER_SIZE];
-    
+
     /** ByteBuffer wrapper for the marker buffer */
     private ByteBuffer markerHead = ByteBuffer.wrap( markerBuffer );
-    
+
     /** The Checksum used */
     private Checksum checksum = new Adler32();
 
-    
+
     /**
      * Creates a new instance of LogManager. It manages the control file and 
      * 
@@ -102,8 +104,8 @@ import org.apache.directory.server.i18n.
     {
         this.logFileManager = logFileManager;
     }
-    
-    
+
+
     /**
      *Initializes the log management:
      * 1) Checks if control file exists and creates it if necessary. If it exists, it reads it and loads 
@@ -121,32 +123,32 @@ import org.apache.directory.server.i18n.
         LogScanner scanner;
         UserLogRecord logRecord;
         LogFileManager.LogFileReader reader;
-        
+
         // Read and verify control file
         boolean controlFileExists = true;
-        
+
         try
         {
             readControlFile();
         }
-        catch( FileNotFoundException e )
+        catch ( FileNotFoundException e )
         {
             controlFileExists = false;
         }
-        
+
         if ( controlFileExists )
         {
             boolean invalidLog = false;
-            
+
             // Set the min log anchor from the control file
-            minLogAnchor.resetLogAnchor( controlFileRecord.minNeededLogFile, 
-                    controlFileRecord.minNeededLogFileOffset, controlFileRecord.minNeededLSN );
-            
+            minLogAnchor.resetLogAnchor( controlFileRecord.minNeededLogFile,
+                controlFileRecord.minNeededLogFileOffset, controlFileRecord.minNeededLSN );
+
             scanPoint.resetLogAnchor( minLogAnchor );
-            
+
             logRecord = new UserLogRecord();
             scanner = new DefaultLogScanner( scanPoint, logFileManager );
-            
+
             // Now, scan all the logged user records to check if they are all valid
             try
             {
@@ -156,7 +158,7 @@ import org.apache.directory.server.i18n.
                     // read all of them to check that they are all valid.
                 }
             }
-            catch( InvalidLogException e )
+            catch ( InvalidLogException e )
             {
                 invalidLog = true;
             }
@@ -164,25 +166,25 @@ import org.apache.directory.server.i18n.
             {
                 scanner.close();
             }
-            
+
             long lastGoodLogFileNumber = scanner.getLastGoodFileNumber();
             long lastGoodLogFileOffset = scanner.getLastGoodOffset();
             currentLogFileNumber = lastGoodLogFileNumber;
-            
-            if ( ( lastGoodLogFileNumber < LogAnchor.MIN_LOG_NUMBER ) || 
-                ( lastGoodLogFileOffset < LogAnchor.MIN_LOG_OFFSET ))
+
+            if ( ( lastGoodLogFileNumber < LogAnchor.MIN_LOG_NUMBER ) ||
+                ( lastGoodLogFileOffset < LogAnchor.MIN_LOG_OFFSET ) )
             {
                 throw new InvalidLogException( I18n.err( I18n.ERR_750 ) );
             }
-            
-            scanPoint.resetLogAnchor( lastGoodLogFileNumber, lastGoodLogFileOffset, 
-                    LogAnchor.UNKNOWN_LSN );
-            
+
+            scanPoint.resetLogAnchor( lastGoodLogFileNumber, lastGoodLogFileOffset,
+                LogAnchor.UNKNOWN_LSN );
+
             if ( anchorComparator.compare( scanPoint, minLogAnchor ) < 0 )
             {
                 throw new InvalidLogException( I18n.err( I18n.ERR_750 ) );
             }
-            
+
             /*
              * If invalid content at the end of file:
              * if we are past the header of file, then
@@ -196,7 +198,7 @@ import org.apache.directory.server.i18n.
             {
                 // Check if next log file exists
                 reader = null;
-                
+
                 try
                 {
                     reader = logFileManager.getReaderForLogFile( ( lastGoodLogFileNumber + 1 ) );
@@ -212,20 +214,20 @@ import org.apache.directory.server.i18n.
                         reader.close();
                     }
                 }
-                
+
                 if ( reader != null )
                 {
                     throw new InvalidLogException( I18n.err( I18n.ERR_750 ) );
                 }
-                
-                if  ( lastGoodLogFileOffset >= LogFileRecords.LOG_FILE_HEADER_SIZE  )
+
+                if ( lastGoodLogFileOffset >= LogFileRecords.LOG_FILE_HEADER_SIZE )
                 {
                     logFileManager.truncateLogFile( lastGoodLogFileNumber, lastGoodLogFileOffset );
                 }
                 else
                 {
                     // Reformat the existing log file
-                    createNextLogFile( true);
+                    createNextLogFile( true );
                 }
             }
         }
@@ -238,16 +240,16 @@ import org.apache.directory.server.i18n.
         reader = null;
         boolean fileExists = false;
         currentLogFileNumber = LogAnchor.MIN_LOG_NUMBER - 1;
-       
+
         try
         {
             reader = logFileManager.getReaderForLogFile( LogAnchor.MIN_LOG_NUMBER );
-           
+
             if ( reader.getLength() > LogFileRecords.LOG_FILE_HEADER_SIZE )
             {
                 throw new InvalidLogException( I18n.err( I18n.ERR_750 ) );
             }
-           
+
             fileExists = true;
             currentLogFileNumber++;
         }
@@ -262,16 +264,17 @@ import org.apache.directory.server.i18n.
                 reader.close();
             }
         }
-       
+
         createNextLogFile( fileExists );
-        
+
         // Prepare the min log anchor and control file and write the control file
-        minLogAnchor.resetLogAnchor( LogAnchor.MIN_LOG_NUMBER, LogFileRecords.LOG_FILE_HEADER_SIZE, LogAnchor.UNKNOWN_LSN );
-       
+        minLogAnchor.resetLogAnchor( LogAnchor.MIN_LOG_NUMBER, LogFileRecords.LOG_FILE_HEADER_SIZE,
+            LogAnchor.UNKNOWN_LSN );
+
         writeControlFile();
     }
-    
-    
+
+
     /**
      * Called by LogFlushManager to switch to the next file.
      *
@@ -283,7 +286,8 @@ import org.apache.directory.server.i18n.
      * @throws IOException If we had an issue accessing the log files
      * @throws InvalidLogException If any of the user record is invalid
      */
-    public LogFileManager.LogFileWriter switchToNextLogFile( LogFileManager.LogFileWriter currentWriter ) throws IOException, InvalidLogException
+    public LogFileManager.LogFileWriter switchToNextLogFile( LogFileManager.LogFileWriter currentWriter )
+        throws IOException, InvalidLogException
     {
         if ( currentWriter != null )
         {
@@ -291,33 +295,33 @@ import org.apache.directory.server.i18n.
             writeControlFile();
             createNextLogFile( false );
         }
-        
-        LogFileManager.LogFileWriter writer =  logFileManager.getWriterForLogFile( currentLogFileNumber );
+
+        LogFileManager.LogFileWriter writer = logFileManager.getWriterForLogFile( currentLogFileNumber );
         long currentOffset = writer.getLength();
-        
+
         if ( currentOffset > 0 )
         {
             writer.seek( currentOffset );
         }
-        
+
         return writer;
     }
-    
-    
+
+
     /**
      * @return The anchor associated with the last valid checkpoint.
      */
-    /* Package protected */ LogAnchor getMinLogAnchor()
+    /* Package protected */LogAnchor getMinLogAnchor()
     {
         minLogAnchorLock.lock();
         LogAnchor anchor = new LogAnchor();
         anchor.resetLogAnchor( minLogAnchor );
         minLogAnchorLock.unlock();
-        
+
         return anchor;
     }
-    
-    
+
+
     /**
      * Called when the logging subsystem is notified about the minimum position 
      * in the log files that is needed. Log manager uses this information to advance
@@ -331,18 +335,18 @@ import org.apache.directory.server.i18n.
         {
             return;
         }
-        
+
         minLogAnchorLock.lock();
-        
+
         if ( anchorComparator.compare( minLogAnchor, newLogAnchor ) < 0 )
         {
             minLogAnchor.resetLogAnchor( newLogAnchor );
         }
-        
+
         minLogAnchorLock.unlock();
     }
-    
-    
+
+
     /**
      * Writes the control file. To make partially written control files unlikely,
      * data is first written to a shadow file and then moved(renamed) to the controlfile.
@@ -366,60 +370,61 @@ import org.apache.directory.server.i18n.
     {
         // Copy the min log file anchor
         minLogAnchorLock.lock();
-        
+
         controlFileRecord.minNeededLogFile = minLogAnchor.getLogFileNumber();
         controlFileRecord.minNeededLogFileOffset = minLogAnchor.getLogFileOffset();
         controlFileRecord.minNeededLSN = minLogAnchor.getLogLSN();
-        
+
         minLogAnchorLock.unlock();
-        
-        if ( controlFileRecord.minNeededLogFile > controlFileRecord.minExistingLogFile  )
+
+        if ( controlFileRecord.minNeededLogFile > controlFileRecord.minExistingLogFile )
         {
-            deleteUnnecessaryLogFiles( controlFileRecord.minExistingLogFile,controlFileRecord.minNeededLogFile );
+            deleteUnnecessaryLogFiles( controlFileRecord.minExistingLogFile, controlFileRecord.minNeededLogFile );
             controlFileRecord.minExistingLogFile = controlFileRecord.minNeededLogFile;
-            
+
         }
-        
+
         // Create the control file record
         controlFileMarker.rewind();
         controlFileMarker.putLong( controlFileRecord.minExistingLogFile );
         controlFileMarker.putLong( controlFileRecord.minNeededLogFile );
         controlFileMarker.putLong( controlFileRecord.minNeededLogFileOffset );
         controlFileMarker.putLong( controlFileRecord.minNeededLSN );
-        
+
         // Compute the checksum
         checksum.reset();
         checksum.update( controlFileMarker.array(), 0, CONTROLFILE_CHECKSUM_SIZE );
         controlFileRecord.checksum = checksum.getValue();
-        
+
         controlFileMarker.putLong( controlFileRecord.checksum );
         controlFileMarker.putInt( CONTROLFILE_MAGIC_NUMBER );
-        
+
         // Create the shadow file, and write the header into it
-        boolean shadowFileExists = logFileManager.createLogFile( CONTROLFILE_SHADOW_LOG_FILE_NUMBER  );
-        
+        boolean shadowFileExists = logFileManager.createLogFile( CONTROLFILE_SHADOW_LOG_FILE_NUMBER );
+
         if ( shadowFileExists )
         {
             logFileManager.truncateLogFile( CONTROLFILE_SHADOW_LOG_FILE_NUMBER, 0 );
         }
-        
-        LogFileManager.LogFileWriter controlFileWriter = logFileManager.getWriterForLogFile( CONTROLFILE_SHADOW_LOG_FILE_NUMBER );
-        
+
+        LogFileManager.LogFileWriter controlFileWriter = logFileManager
+            .getWriterForLogFile( CONTROLFILE_SHADOW_LOG_FILE_NUMBER );
+
         try
         {
-            controlFileWriter.append( controlFileBuffer, 0, CONTROLFILE_RECORD_SIZE);
+            controlFileWriter.append( controlFileBuffer, 0, CONTROLFILE_RECORD_SIZE );
             controlFileWriter.sync();
         }
         finally
         {
             controlFileWriter.close();
         }
-        
+
         // Do the move now
-        logFileManager.rename( CONTROLFILE_SHADOW_LOG_FILE_NUMBER , CONTROLFILE_LOG_FILE_NUMBER );
+        logFileManager.rename( CONTROLFILE_SHADOW_LOG_FILE_NUMBER, CONTROLFILE_LOG_FILE_NUMBER );
     }
-    
-    
+
+
     /**
      * Read and verifies the control file.
      *
@@ -429,21 +434,22 @@ import org.apache.directory.server.i18n.
      */
     private void readControlFile() throws IOException, InvalidLogException, FileNotFoundException
     {
-        LogFileManager.LogFileReader controlFileReader = logFileManager.getReaderForLogFile( CONTROLFILE_LOG_FILE_NUMBER );
-        
+        LogFileManager.LogFileReader controlFileReader = logFileManager
+            .getReaderForLogFile( CONTROLFILE_LOG_FILE_NUMBER );
+
         try
         {
             controlFileReader.read( controlFileBuffer, 0, CONTROLFILE_RECORD_SIZE );
         }
-        catch( EOFException e )
+        catch ( EOFException e )
         {
-            throw new InvalidLogException( I18n.err( I18n.ERR_750 ) , e);
+            throw new InvalidLogException( I18n.err( I18n.ERR_750 ), e );
         }
         finally
         {
             controlFileReader.close();
         }
-        
+
         controlFileMarker.rewind();
         controlFileRecord.minExistingLogFile = controlFileMarker.getLong();
         controlFileRecord.minNeededLogFile = controlFileMarker.getLong();
@@ -451,22 +457,22 @@ import org.apache.directory.server.i18n.
         controlFileRecord.minNeededLSN = controlFileMarker.getLong();
         controlFileRecord.checksum = controlFileMarker.getLong();
         int magicNumber = controlFileMarker.getInt();
-        
+
         checksum.reset();
         checksum.update( controlFileMarker.array(), 0, CONTROLFILE_CHECKSUM_SIZE );
-        
+
         if ( ( controlFileRecord.minExistingLogFile < LogAnchor.MIN_LOG_NUMBER ) ||
-             ( controlFileRecord.minNeededLogFile < LogAnchor.MIN_LOG_NUMBER ) ||
-             ( controlFileRecord.minNeededLogFileOffset < LogAnchor.MIN_LOG_OFFSET ) ||
-             ( controlFileRecord.minExistingLogFile > controlFileRecord.minNeededLogFile ) ||
-             ( magicNumber != CONTROLFILE_MAGIC_NUMBER ) || 
-             ( controlFileRecord.checksum != checksum.getValue() ) )
+            ( controlFileRecord.minNeededLogFile < LogAnchor.MIN_LOG_NUMBER ) ||
+            ( controlFileRecord.minNeededLogFileOffset < LogAnchor.MIN_LOG_OFFSET ) ||
+            ( controlFileRecord.minExistingLogFile > controlFileRecord.minNeededLogFile ) ||
+            ( magicNumber != CONTROLFILE_MAGIC_NUMBER ) ||
+            ( controlFileRecord.checksum != checksum.getValue() ) )
         {
             throw new InvalidLogException( I18n.err( I18n.ERR_750 ) );
         }
     }
-    
-    
+
+
     /**
      * Creates the next log file. If the log file already exists, then it is reformatted, that is,
      * its size is truncated to zero and file header is written again.
@@ -478,31 +484,31 @@ import org.apache.directory.server.i18n.
     private void createNextLogFile( boolean reformatExistingFile ) throws IOException, InvalidLogException
     {
         LogFileManager.LogFileWriter writer = null;
-        
+
         long logFileNumber = currentLogFileNumber;
-        
+
         if ( reformatExistingFile == false )
         {
             logFileNumber++;
         }
-        
+
         // Try to create the file.
         boolean fileAlreadyExists = logFileManager.createLogFile( logFileNumber );
-        
+
         if ( reformatExistingFile != fileAlreadyExists )
         {
             // Didnt expect the file to be around
             throw new InvalidLogException( I18n.err( I18n.ERR_750 ) );
         }
-        
+
         if ( reformatExistingFile )
         {
             logFileManager.truncateLogFile( logFileNumber, LogAnchor.MIN_LOG_OFFSET );
-           
+
         }
-        
+
         writer = logFileManager.getWriterForLogFile( logFileNumber );
-        
+
         try
         {
             markerHead.rewind();
@@ -515,43 +521,41 @@ import org.apache.directory.server.i18n.
         {
             writer.close();
         }
-        
+
         currentLogFileNumber = logFileNumber;
     }
-    
-    
+
+
     /**
      * Purge the useless log files
      */
     private void deleteUnnecessaryLogFiles( long startingLogFileNumber, long endingLogFileNumber )
     {
-        for ( long logFileNumber = startingLogFileNumber; logFileNumber < endingLogFileNumber; 
-                logFileNumber++ )
+        for ( long logFileNumber = startingLogFileNumber; logFileNumber < endingLogFileNumber; logFileNumber++ )
         {
             // Do a best effort delete
             logFileManager.deleteLogFile( logFileNumber );
         }
     }
-    
-    
+
     /**
      * Checkpoint record
      */
-     private class ControlFileRecord
-     {
-         /** The smallest existing log file number */
-         private long minExistingLogFile;
-         
-         /** The log file number associated with a checkpoint */
-         private long minNeededLogFile;
-         
-         /** The offset in the min needed log file */
-         private long minNeededLogFileOffset;
-         
-         /** The LSN of the first user record in the min needed log file at the offset position */
-         private long minNeededLSN;
-         
-         /** The control file checksum */
-         private long checksum;
-     }
+    private class ControlFileRecord
+    {
+        /** The smallest existing log file number */
+        private long minExistingLogFile;
+
+        /** The log file number associated with a checkpoint */
+        private long minNeededLogFile;
+
+        /** The offset in the min needed log file */
+        private long minNeededLogFileOffset;
+
+        /** The LSN of the first user record in the min needed log file at the offset position */
+        private long minNeededLSN;
+
+        /** The control file checksum */
+        private long checksum;
+    }
 }

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/EntryCursorAdaptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/EntryCursorAdaptor.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/EntryCursorAdaptor.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/partition/EntryCursorAdaptor.java Thu Jan  5 17:28:50 2012
@@ -44,15 +44,17 @@ import org.apache.directory.shared.ldap.
 public class EntryCursorAdaptor implements Cursor<Entry>
 {
     /** Underlying partition */
-    private  Partition db;
-    
+    private Partition db;
+
     /** Wrapped cursor */
-    private  IndexCursor<UUID> indexCursor;
+    private IndexCursor<UUID> indexCursor;
 
     /** Master table of the partition */
     MasterTable masterTable;
 
-    public EntryCursorAdaptor( Partition db, IndexCursor<UUID> indexCursor, TxnManagerFactory txnManagerFactory ) throws Exception
+
+    public EntryCursorAdaptor( Partition db, IndexCursor<UUID> indexCursor, TxnManagerFactory txnManagerFactory )
+        throws Exception
     {
         this.db = db;
         this.indexCursor = indexCursor;

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/IndexCursorWrapper.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/IndexCursorWrapper.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/IndexCursorWrapper.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/IndexCursorWrapper.java Thu Jan  5 17:28:50 2012
@@ -19,6 +19,7 @@
  */
 package org.apache.directory.server.core.shared.txn;
 
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.NavigableSet;
@@ -36,6 +37,7 @@ import org.apache.directory.server.i18n.
 import org.apache.directory.shared.ldap.model.cursor.InvalidCursorPositionException;
 import org.apache.directory.shared.ldap.model.name.Dn;
 
+
 /**
  * Wraps an index's cursor and provides a transactionally consistent view.
  * 
@@ -57,74 +59,77 @@ public class IndexCursorWrapper extends 
 {
     /** Cursors to merge */
     private ArrayList<IndexCursor<Object>> cursors;
-    
+
     /** list of values available per cursor */
     private ArrayList<IndexEntry<Object>> values;
-    
+
     /** index get should get the value from */
     private int getIndex = -1;
-    
+
     /** Dn of the partition */
     private Dn partitionDn;
-    
+
     /** Index attribute oid */
     private String attributeOid;
-    
+
     /** whether this is a cursor on forward or reverse index */
     private boolean forwardIndex;
-    
+
     /** Index deletes by txns that this cursor depends on */
     private ArrayList<NavigableSet<IndexEntry<Object>>> deletes;
-    
+
     /** True if cursor is positioned */
     private boolean positioned;
-    
+
     /** direction of the move */
     private boolean movingNext = true;
-    
+
     /** Comparator used to order the index entries */
     private IndexComparator<Object> comparator;
-    
+
     /** unsupported operation message */
     private static final String UNSUPPORTED_MSG = I18n.err( I18n.ERR_722 );
-    
+
     /** Last value returned: here to keep memory overhead low */
     private ForwardIndexEntry<Object> lastValue = new ForwardIndexEntry<Object>();
-    
+
     /** Txn Manager */
     TxnManagerInternal txnManager;
-     
-    public IndexCursorWrapper( TxnManagerFactory txnManagerFactory, Dn partitionDn, 
-            IndexCursor<Object> wrappedCursor, IndexComparator<Object> comparator, String attributeOid, boolean forwardIndex, Object onlyValueKey, UUID onlyIDKey )
+
+
+    public IndexCursorWrapper( TxnManagerFactory txnManagerFactory, Dn partitionDn,
+        IndexCursor<Object> wrappedCursor, IndexComparator<Object> comparator, String attributeOid,
+        boolean forwardIndex, Object onlyValueKey, UUID onlyIDKey )
     {
         this.partitionDn = partitionDn;
         this.forwardIndex = forwardIndex;
         this.attributeOid = attributeOid;
         this.comparator = comparator;
-        
-        txnManager = txnManagerFactory.txnManagerInternalInstance();      
-        Transaction curTxn = txnManager.getCurTxn();  
-        List<ReadWriteTxn> toCheck = curTxn.getTxnsToCheck(); 
-        
+
+        txnManager = txnManagerFactory.txnManagerInternalInstance();
+        Transaction curTxn = txnManager.getCurTxn();
+        List<ReadWriteTxn> toCheck = curTxn.getTxnsToCheck();
+
         cursors = new ArrayList<IndexCursor<Object>>( toCheck.size() + 1 );
         values = new ArrayList<IndexEntry<Object>>( toCheck.size() + 1 );
-        cursors.add( ( IndexCursor<Object> )wrappedCursor );
+        cursors.add( ( IndexCursor<Object> ) wrappedCursor );
         values.add( null );
-        
+
         if ( toCheck.size() > 0 )
         {
             deletes = new ArrayList<NavigableSet<IndexEntry<Object>>>( toCheck.size() );
-            
+
             ReadWriteTxn dependentTxn;
-            
+
             for ( int idx = 0; idx < toCheck.size(); idx++ )
             {
                 dependentTxn = toCheck.get( idx );
-                
+
                 if ( curTxn == dependentTxn )
                 {
-                    NavigableSet<IndexEntry<Object>> txnDeletes = dependentTxn.getDeletesFor( partitionDn, attributeOid );
-                    
+                    NavigableSet<IndexEntry<Object>> txnDeletes = dependentTxn
+                        .getDeletesFor( partitionDn, attributeOid );
+
                     if ( txnDeletes != null )
                     {
                         TreeSet<IndexEntry<Object>> clonedDeletes = new TreeSet<IndexEntry<Object>>( comparator );
@@ -140,16 +145,17 @@ public class IndexCursorWrapper extends 
                 {
                     deletes.add( dependentTxn.getDeletesFor( partitionDn, attributeOid ) );
                 }
-                
+
                 values.add( null );
-                
+
                 // This adds a null to the array if the txn does not have any changes for the index
-                cursors.add( getCursorFor( dependentTxn, partitionDn, attributeOid, forwardIndex, onlyValueKey, onlyIDKey, comparator ) );
+                cursors.add( getCursorFor( dependentTxn, partitionDn, attributeOid, forwardIndex, onlyValueKey,
+                    onlyIDKey, comparator ) );
             }
         }
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -159,23 +165,24 @@ public class IndexCursorWrapper extends 
         positioned = true;
         movingNext = true;
         IndexCursor<Object> cursor;
-        
+
         checkNotClosed( "after()" );
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             values.set( idx, null );
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.after( element );
             }
         }
-        
+
         getIndex = -1;
     }
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -185,24 +192,24 @@ public class IndexCursorWrapper extends 
         positioned = true;
         movingNext = true;
         IndexCursor<Object> cursor;
-        
+
         checkNotClosed( "before()" );
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             values.set( idx, null );
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.before( element );
             }
         }
-        
+
         getIndex = -1;
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -212,20 +219,20 @@ public class IndexCursorWrapper extends 
         positioned = true;
         movingNext = true;
         IndexCursor<Object> cursor;
-        
+
         checkNotClosed( "afterValue()" );
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             values.set( idx, null );
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.afterValue( id, value );
             }
         }
-        
+
         getIndex = -1;
     }
 
@@ -239,24 +246,24 @@ public class IndexCursorWrapper extends 
         positioned = true;
         movingNext = true;
         IndexCursor<Object> cursor;
-        
+
         checkNotClosed( "beforeValue()" );
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             values.set( idx, null );
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.beforeValue( id, value );
             }
         }
-        
+
         getIndex = -1;
     }
-   
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -266,20 +273,20 @@ public class IndexCursorWrapper extends 
         positioned = true;
         movingNext = true;
         IndexCursor<Object> cursor;
-        
+
         checkNotClosed( "beforeFirst()" );
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             values.set( idx, null );
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.beforeFirst();
             }
         }
-        
+
         getIndex = -1;
     }
 
@@ -293,24 +300,24 @@ public class IndexCursorWrapper extends 
         positioned = true;
         movingNext = false;
         IndexCursor<Object> cursor;
-        
+
         checkNotClosed( "afterLast()" );
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             values.set( idx, null );
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
-                cursor.afterLast( );
+                cursor.afterLast();
             }
-            
+
         }
-        
+
         getIndex = -1;
     }
-    
+
 
     /**
      * {@inheritDoc}
@@ -318,10 +325,10 @@ public class IndexCursorWrapper extends 
     public boolean first() throws Exception
     {
         beforeFirst();
-        
+
         return next();
     }
-    
+
 
     /**
      * {@inheritDoc}
@@ -329,11 +336,11 @@ public class IndexCursorWrapper extends 
     public boolean last() throws Exception
     {
         afterLast();
-        
+
         return previous();
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -342,10 +349,9 @@ public class IndexCursorWrapper extends 
         IndexCursor<Object> cursor;
         IndexEntry<Object> minValue;
         IndexEntry<Object> value;
-        
+
         checkNotClosed( "next()" );
-        
-        
+
         if ( getIndex >= 0 )
         {
             IndexEntry<Object> indexEntry = values.get( getIndex );
@@ -356,38 +362,38 @@ public class IndexCursorWrapper extends 
         {
             lastValue.setId( null );
         }
-        
+
         int idx;
-        
+
         if ( positioned == false )
         {
             beforeFirst();
         }
-        
+
         /*
          *  If called right after positioning the cursor or changing direction, then do a next call
          *  on every wrapped cursor and recompute the min value.
          */
-        if ((  movingNext == false ) || ( getIndex < 0 ) )
+        if ( ( movingNext == false ) || ( getIndex < 0 ) )
         {
             minValue = null;
             getIndex = -1;
             movingNext = true;
-            
+
             for ( idx = 0; idx < values.size(); idx++ )
             {
                 cursor = cursors.get( idx );
-                
+
                 if ( ( cursor != null ) && cursor.next() )
                 {
                     value = cursor.get();
-                    
+
                     if ( ( getIndex < 0 ) || ( comparator.compare( value, minValue ) < 0 ) )
                     {
                         minValue = value;
                         getIndex = idx;
                     }
-                    
+
                     values.set( idx, value );
                 }
                 else
@@ -399,57 +405,59 @@ public class IndexCursorWrapper extends 
         else
         {
             // Move the last cursor we did a get from and recompute minimum
-           recomputeMinimum();
+            recomputeMinimum();
         }
-        
+
         int txnIdx;
         NavigableSet<IndexEntry<Object>> txnDeletes;
         boolean valueDeleted;
-        
+
         do
         {
             if ( getIndex < 0 )
             {
                 break;
             }
-            
+
             value = values.get( getIndex );
-            
+
             txnIdx = getIndex;
-            
+
             if ( txnIdx > 0 )
             {
                 txnIdx--;
             }
-            
+
             valueDeleted = false;
-            
+
             for ( ; txnIdx < deletes.size(); txnIdx++ )
             {
                 txnDeletes = deletes.get( txnIdx );
-                
+
                 if ( ( txnDeletes != null ) && ( txnDeletes.contains( value ) ) )
                 {
                     valueDeleted = true;
                     break;
                 }
             }
-            
+
             // If the value we get is not deleted and greater than the last value we returned, then we are done
-            if ( ( valueDeleted == false ) && ( ( lastValue.getId() == null ) || ( comparator.compare( value, lastValue ) > 0 ) ) )
+            if ( ( valueDeleted == false )
+                && ( ( lastValue.getId() == null ) || ( comparator.compare( value, lastValue ) > 0 ) ) )
             {
                 break;
             }
-            
+
             // Recompute minimum
             recomputeMinimum();
-            
-        } while ( true );
-        
+
+        }
+        while ( true );
+
         return ( getIndex >= 0 );
-    } 
-    
-    
+    }
+
+
     /**
      * {@inheritDoc}
      */
@@ -458,9 +466,9 @@ public class IndexCursorWrapper extends 
         IndexCursor<Object> cursor;
         IndexEntry<Object> maxValue;
         IndexEntry<Object> value;
-        
+
         checkNotClosed( "previous()" );
-        
+
         if ( getIndex >= 0 )
         {
             IndexEntry<Object> indexEntry = values.get( getIndex );
@@ -471,15 +479,14 @@ public class IndexCursorWrapper extends 
         {
             lastValue.setId( null );
         }
-        
+
         int idx;
-        
+
         if ( positioned == false )
         {
             afterLast();
         }
-        
-        
+
         /*
          *  If called right after positioning the cursor or changing direction, then do a previous call
          *  on every wrapped cursor and recompute the max value.
@@ -489,21 +496,21 @@ public class IndexCursorWrapper extends 
             maxValue = null;
             getIndex = -1;
             movingNext = false;
-            
+
             for ( idx = 0; idx < values.size(); idx++ )
             {
                 cursor = cursors.get( idx );
-                
+
                 if ( ( cursor != null ) && cursor.previous() )
                 {
                     value = cursor.get();
-                    
+
                     if ( ( getIndex < 0 ) || ( comparator.compare( value, maxValue ) > 0 ) )
                     {
                         maxValue = value;
                         getIndex = idx;
                     }
-                    
+
                     values.set( idx, value );
                 }
                 else
@@ -515,73 +522,75 @@ public class IndexCursorWrapper extends 
         else
         {
             // Move the last cursor we did a get from and recompute maximum
-           recomputeMaximum();
+            recomputeMaximum();
         }
-        
+
         int txnIdx;
         NavigableSet<IndexEntry<Object>> txnDeletes;
         boolean valueDeleted;
-        
+
         do
         {
             if ( getIndex < 0 )
             {
                 break;
             }
-            
+
             value = values.get( getIndex );
-            
+
             txnIdx = getIndex;
-            
+
             if ( txnIdx > 0 )
             {
                 txnIdx--;
             }
-            
+
             valueDeleted = false;
-            
+
             for ( ; txnIdx < deletes.size(); txnIdx++ )
             {
                 txnDeletes = deletes.get( txnIdx );
-                
-                if ( txnDeletes!= null && txnDeletes.contains( value ) )
+
+                if ( txnDeletes != null && txnDeletes.contains( value ) )
                 {
                     valueDeleted = true;
                     break;
                 }
             }
-            
+
             // If the value we get is not deleted and less than the last value we returned, then we are done
-            if ( ( valueDeleted == false ) && ( ( lastValue.getId() == null ) || ( comparator.compare( value, lastValue ) < 0 ) ) )
+            if ( ( valueDeleted == false )
+                && ( ( lastValue.getId() == null ) || ( comparator.compare( value, lastValue ) < 0 ) ) )
             {
                 break;
             }
-            
+
             // Recompute maximum
             recomputeMaximum();
-            
-        } while ( true );
-        
+
+        }
+        while ( true );
+
         return ( getIndex >= 0 );
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
     public IndexEntry<Object> get() throws Exception
     {
         checkNotClosed( "get()" );
-        
+
         if ( getIndex >= 0 )
         {
             IndexEntry<Object> value = values.get( getIndex );
-            
+
             if ( value == null )
             {
                 throw new IllegalStateException( "getIndex points to a null value" );
             }
-            
+
             /*
              * TODO fixme:
              * Upper layers might change the index entry we return. To work around this.
@@ -589,7 +598,7 @@ public class IndexCursorWrapper extends 
              * search engine is changed to avoid modifying index entries.
              */
             IndexEntry<Object> indexEntry;
-            
+
             if ( forwardIndex )
             {
                 indexEntry = new ForwardIndexEntry<Object>();
@@ -598,17 +607,17 @@ public class IndexCursorWrapper extends 
             {
                 indexEntry = new ReverseIndexEntry<Object>();
             }
-            
+
             indexEntry.setId( value.getId() );
             indexEntry.setValue( value.getValue() );
-            
+
             return indexEntry;
         }
 
         throw new InvalidCursorPositionException();
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -616,14 +625,14 @@ public class IndexCursorWrapper extends 
     public void close() throws Exception
     {
         super.close();
-        
+
         IndexCursor<Object> cursor;
         int idx;
-        
+
         for ( idx = 0; idx < cursors.size(); idx++ )
         {
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.close();
@@ -639,22 +648,22 @@ public class IndexCursorWrapper extends 
     public void close( Exception cause ) throws Exception
     {
         super.close( cause );
-        
+
         IndexCursor<Object> cursor;
         int idx;
-        
+
         for ( idx = 0; idx < cursors.size(); idx++ )
         {
             cursor = cursors.get( idx );
-            
+
             if ( cursor != null )
             {
                 cursor.close( cause );
             }
         }
     }
-    
-    
+
+
     /**
      * {@inheritDoc}
      */
@@ -663,7 +672,7 @@ public class IndexCursorWrapper extends 
         return UNSUPPORTED_MSG;
     }
 
-    
+
     /**
      * Do a get on the last cursor we got the value from and recompute the minimum
      *
@@ -675,26 +684,25 @@ public class IndexCursorWrapper extends 
         IndexEntry<Object> minValue;
         IndexEntry<Object> value;
         int idx;
-        
+
         cursor = cursors.get( getIndex );
-        
+
         if ( cursor.next() )
         {
-            values.set( getIndex , cursor.get() );
+            values.set( getIndex, cursor.get() );
         }
         else
         {
             values.set( getIndex, null );
         }
-        
-        
+
         minValue = null;
         getIndex = -1;
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             value = values.get( idx );
-            
+
             if ( value != null )
             {
                 if ( ( getIndex < 0 ) || ( comparator.compare( value, minValue ) < 0 ) )
@@ -705,7 +713,8 @@ public class IndexCursorWrapper extends 
             }
         }
     }
-    
+
+
     /**
      * Do a previous we got the value from and recompute the maximum.
      *
@@ -717,26 +726,25 @@ public class IndexCursorWrapper extends 
         IndexEntry<Object> maxValue;
         IndexEntry<Object> value;
         int idx;
-        
+
         cursor = cursors.get( getIndex );
-        
+
         if ( cursor.previous() )
         {
-            values.set( getIndex , cursor.get() );
+            values.set( getIndex, cursor.get() );
         }
         else
         {
             values.set( getIndex, null );
         }
-        
-        
+
         maxValue = null;
         getIndex = -1;
-        
+
         for ( idx = 0; idx < values.size(); idx++ )
         {
             value = values.get( idx );
-            
+
             if ( value != null )
             {
                 if ( ( getIndex < 0 ) || ( comparator.compare( value, maxValue ) > 0 ) )
@@ -747,7 +755,8 @@ public class IndexCursorWrapper extends 
             }
         }
     }
-    
+
+
     /**
      * Returns a cursor over the changes made by the given txn on the index identified by partitionDn+attributeOid. 
      *
@@ -760,10 +769,11 @@ public class IndexCursorWrapper extends 
      * @param comparator comparator that will be used to order index entries.
      * @return
      */
-    private IndexCursor<Object> getCursorFor( ReadWriteTxn txn, Dn partitionDn, String attributeOid, boolean forwardIndex,
+    private IndexCursor<Object> getCursorFor( ReadWriteTxn txn, Dn partitionDn, String attributeOid,
+        boolean forwardIndex,
         Object onlyValueKey, UUID onlyIDKey, IndexComparator<Object> comparator )
     {
-        NavigableSet<IndexEntry<Object>> changes; 
+        NavigableSet<IndexEntry<Object>> changes;
         TxnIndexCursor txnIndexCursor = null;
 
         if ( forwardIndex )
@@ -774,21 +784,21 @@ public class IndexCursorWrapper extends 
         {
             changes = txn.getReverseIndexChanges( partitionDn, attributeOid );
         }
-        
+
         if ( changes == null || ( changes.size() == 0 ) )
         {
             return null;
         }
-        
+
         Transaction curTxn = txnManager.getCurTxn();
-        
+
         if ( txn == curTxn )
         {
             NavigableSet<IndexEntry<Object>> originalChanges = changes;
             changes = new TreeSet<IndexEntry<Object>>( comparator );
             changes.addAll( originalChanges );
         }
-        
+
         return new TxnIndexCursor( changes, forwardIndex, onlyValueKey, onlyIDKey, comparator );
     }
 

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/TxnManagerFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/TxnManagerFactory.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/TxnManagerFactory.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/main/java/org/apache/directory/server/core/shared/txn/TxnManagerFactory.java Thu Jan  5 17:28:50 2012
@@ -43,7 +43,7 @@ public class TxnManagerFactory
 
     /** log suffix */
     private String LOG_SUFFIX = "log";
-    
+
     private boolean inited;
 
 
@@ -58,7 +58,7 @@ public class TxnManagerFactory
      */
     public TxnManagerFactory( String logFolderPath,
         int logBufferSize, long logFileSize ) throws IOException
-    {       
+    {
         Log log = new DefaultLog();
 
         try
@@ -75,24 +75,25 @@ public class TxnManagerFactory
         txnLogManager = new DefaultTxnLogManager( log, this );
 
         ( ( DefaultTxnManager ) txnManager ).init( txnLogManager );
-        
+
         inited = true;
 
     }
-    
+
+
     public void uninit()
     {
         if ( inited == false )
         {
             return;
         }
-        
+
         ( ( DefaultTxnManager ) txnManager ).uninit();
-        ( (DefaultTxnLogManager) txnLogManager).uninit();
+        ( ( DefaultTxnLogManager ) txnLogManager ).uninit();
         inited = false;
     }
-    
-    
+
+
     public TxnManager txnManagerInstance()
     {
         return txnManager;

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFileManagerTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFileManagerTest.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFileManagerTest.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFileManagerTest.java Thu Jan  5 17:28:50 2012
@@ -19,6 +19,7 @@
  */
 package org.apache.directory.server.core.shared.log;
 
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -35,6 +36,7 @@ import static org.junit.Assert.assertTru
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
+
 /**
  * Tests for the LogFileManager class
  * 
@@ -45,6 +47,7 @@ public class LogFileManagerTest
     @Rule
     public TemporaryFolder folder = new TemporaryFolder();
 
+
     @Test
     public void testCreateLogFile() throws IOException
     {
@@ -52,13 +55,13 @@ public class LogFileManagerTest
 
         assertNotNull( logFileManager );
         assertFalse( logFileManager.createLogFile( 0L ) );
-        
+
         // Now try to create the same file again :  it should return true (file already exists)
         assertTrue( logFileManager.createLogFile( 0L ) );
     }
 
-    
-    @Test( expected = FileNotFoundException.class )
+
+    @Test(expected = FileNotFoundException.class)
     public void testDeleteLogFile() throws IOException
     {
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
@@ -66,17 +69,17 @@ public class LogFileManagerTest
         assertNotNull( logFileManager );
         assertFalse( logFileManager.createLogFile( 0L ) );
         assertNotNull( logFileManager.getReaderForLogFile( 0L ) );
-        
+
         // Now try to delete the file
         logFileManager.deleteLogFile( 0L );
-        
+
         // This should throw a FNFE
         logFileManager.getReaderForLogFile( 0L );
-        
+
         fail();
     }
 
-    
+
     @Test
     public void testDeleteNotExistingLogFile() throws IOException
     {
@@ -88,13 +91,13 @@ public class LogFileManagerTest
 
         // Delete the file
         logFileManager.deleteLogFile( 0L );
-        
+
         // Now try to delete a not existing file : it should still be ok
         logFileManager.deleteLogFile( 1L );
     }
 
-    
-    @Test( expected = FileNotFoundException.class )
+
+    @Test(expected = FileNotFoundException.class)
     public void testRenameLogFile() throws IOException
     {
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
@@ -102,89 +105,89 @@ public class LogFileManagerTest
         assertNotNull( logFileManager );
         assertFalse( logFileManager.createLogFile( 0L ) );
         assertNotNull( logFileManager.getReaderForLogFile( 0L ) );
-        
+
         // Now try to rename the file
         logFileManager.rename( 0L, 1L );
-        
+
         // This should work
         assertNotNull( logFileManager.getReaderForLogFile( 1L ) );
 
         // This should throw a FNFE
         logFileManager.getReaderForLogFile( 0L );
-        
+
         fail();
     }
 
-    
+
     @Test
     public void testTruncateLogFile() throws IOException
     {
         String fileName = folder.getRoot().getAbsolutePath() + File.separatorChar + "log_0.log";
-        
+
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
 
         assertNotNull( logFileManager );
         assertFalse( logFileManager.createLogFile( 0L ) );
         LogFileWriter logFileWriter = logFileManager.getWriterForLogFile( 0L );
-        
+
         // Write 1024 bytes in the file
         byte[] buffer = new byte[1024];
         logFileWriter.append( buffer, 0, buffer.length );
         logFileWriter.sync();
-        
+
         // Check the file length
         File file = new File( fileName );
         assertEquals( 1024, file.length() );
-        
+
         // Now try to truncate the file
         logFileManager.truncateLogFile( 0L, 512 );
         assertEquals( 512, file.length() );
     }
-    
-    
+
+
     @Test
     public void testLogFileReaderRead() throws IOException
     {
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
 
         LogFileWriter logFileWriter = logFileManager.getWriterForLogFile( 0L );
-        
+
         // Write 1024 bytes in the file
         byte[] buffer = new byte[1024];
-        Arrays.fill( buffer, (byte)0xAA );
-        
+        Arrays.fill( buffer, ( byte ) 0xAA );
+
         logFileWriter.append( buffer, 0, buffer.length );
         logFileWriter.sync();
-        
+
         // Check the read operation
         LogFileReader logFileReader = logFileManager.getReaderForLogFile( 0L );
-        
+
         byte[] readBuffer = new byte[1024];
         logFileReader.read( readBuffer, 0, 1024 );
-        
+
         assertTrue( Arrays.equals( buffer, readBuffer ) );
     }
-    
-    
+
+
     @Test
     public void testLogFileReaderGetOffset() throws IOException
     {
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
 
         LogFileWriter logFileWriter = logFileManager.getWriterForLogFile( 0L );
-        
+
         // Write 1024 bytes in the file
         byte[] buffer = new byte[1024];
-        Arrays.fill( buffer, (byte)0xAA );
-        
+        Arrays.fill( buffer, ( byte ) 0xAA );
+
         logFileWriter.append( buffer, 0, buffer.length );
         logFileWriter.sync();
-        
+
         LogFileReader logFileReader = logFileManager.getReaderForLogFile( 0L );
 
         // check the initial offset
         assertEquals( 0L, logFileReader.getOffset() );
-        
+
         // Now, read the file
         byte[] readBuffer = new byte[1024];
         logFileReader.read( readBuffer, 0, 1024 );
@@ -192,79 +195,79 @@ public class LogFileManagerTest
         // And check the offset again
         assertEquals( 1024L, logFileReader.getOffset() );
     }
-    
-    
+
+
     @Test
     public void testLogFileReaderGetLength() throws IOException
     {
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
 
         LogFileWriter logFileWriter = logFileManager.getWriterForLogFile( 0L );
-        
+
         LogFileReader logFileReader = logFileManager.getReaderForLogFile( 0L );
-        
+
         // Check that the file is empty
         assertEquals( 0, logFileReader.getLength() );
 
         // Write 1024 bytes in the file
         byte[] buffer = new byte[1024];
-        Arrays.fill( buffer, (byte)0xAA );
-        
+        Arrays.fill( buffer, ( byte ) 0xAA );
+
         logFileWriter.append( buffer, 0, buffer.length );
         logFileWriter.sync();
-        
+
         // Now check that the file contains 1024 bytes
         assertEquals( 1024L, logFileReader.getLength() );
     }
-    
-    
+
+
     @Test
     public void testLogFileReaderSeek() throws IOException
     {
         LogFileManager logFileManager = new DefaultLogFileManager( folder.getRoot().getAbsolutePath(), "log" );
 
         LogFileWriter logFileWriter = logFileManager.getWriterForLogFile( 0L );
-        
+
         LogFileReader logFileReader = logFileManager.getReaderForLogFile( 0L );
-        
+
         // Write 1024 bytes in the file
         byte[] buffer = new byte[1024];
         byte[] buffer0 = new byte[256];
         byte[] buffer1 = new byte[256];
         byte[] buffer2 = new byte[256];
         byte[] buffer3 = new byte[256];
-        
+
         // The buffer will contain 0000... 1111... 2222... 3333
-        Arrays.fill( buffer0, (byte)0x00 ); 
-        Arrays.fill( buffer1, (byte)0x01 ); 
-        Arrays.fill( buffer2, (byte)0x02 ); 
-        Arrays.fill( buffer3, (byte)0x03 );
-        
+        Arrays.fill( buffer0, ( byte ) 0x00 );
+        Arrays.fill( buffer1, ( byte ) 0x01 );
+        Arrays.fill( buffer2, ( byte ) 0x02 );
+        Arrays.fill( buffer3, ( byte ) 0x03 );
+
         System.arraycopy( buffer0, 0, buffer, 0, 256 );
         System.arraycopy( buffer1, 0, buffer, 256, 256 );
         System.arraycopy( buffer2, 0, buffer, 512, 256 );
         System.arraycopy( buffer3, 0, buffer, 768, 256 );
-        
+
         logFileWriter.append( buffer, 0, buffer.length );
         logFileWriter.sync();
-        
+
         // Read the third block of 256 bytes
         byte[] readBuffer = new byte[256];
         logFileReader.seek( 512L );
         logFileReader.read( readBuffer, 0, 256 );
-        
+
         assertTrue( Arrays.equals( buffer2, readBuffer ) );
 
         // Read the first block of 256 bytes
         logFileReader.seek( 0L );
         logFileReader.read( readBuffer, 0, 256 );
-        
+
         assertTrue( Arrays.equals( buffer0, readBuffer ) );
 
         // Read the forth block of 256 bytes
         logFileReader.seek( 768L );
         logFileReader.read( readBuffer, 0, 256 );
-        
+
         assertTrue( Arrays.equals( buffer3, readBuffer ) );
     }
 }
\ No newline at end of file

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFlushScanTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFlushScanTest.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFlushScanTest.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogFlushScanTest.java Thu Jan  5 17:28:50 2012
@@ -19,6 +19,7 @@
  */
 package org.apache.directory.server.core.shared.log;
 
+
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
@@ -37,6 +38,7 @@ import org.junit.rules.TemporaryFolder;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+
 /**
  * Test the LogFlushScan implementation
  * 
@@ -46,16 +48,16 @@ public class LogFlushScanTest
 {
     /** Logger */
     private Log log;
-    
+
     /** Log buffer size : 4096 bytes */
     private int logBufferSize = 1 << 12;
-    
+
     /** Log File Size : 8192 bytes */
     private long logFileSize = 1 << 13;
-    
+
     /** log suffix */
     private static String LOG_SUFFIX = "log";
-    
+
     @Rule
     public TemporaryFolder folder = new TemporaryFolder();
 
@@ -63,11 +65,11 @@ public class LogFlushScanTest
     /**
      * Get the Log folder
      */
-    private String getLogFolder( ) throws IOException
+    private String getLogFolder() throws IOException
     {
         File newFolder = folder.newFolder( LOG_SUFFIX );
         String file = newFolder.getAbsolutePath();
-        
+
         return file;
     }
 
@@ -84,8 +86,8 @@ public class LogFlushScanTest
     public void teardown() throws IOException
     {
     }
-    
-    
+
+
     @Test
     public void testAppendScan()
     {
@@ -94,57 +96,57 @@ public class LogFlushScanTest
         UserLogRecord logRecord = new UserLogRecord();
         byte recordData[] = new byte[dataLength];
         byte userRecord[];
-        
+
         byte writtenCounter = 1;
         byte readCounter = 0;
-        
+
         LogAnchor startingPoint = new LogAnchor();
-        
+
         try
         {
             logRecord.setData( recordData, dataLength );
             log.log( logRecord, false );
-            
+
             // Record the starting point
             startingPoint.resetLogAnchor( logRecord.getLogAnchor() );
-            
-            Arrays.fill( recordData, (byte)writtenCounter );
-            
+
+            Arrays.fill( recordData, ( byte ) writtenCounter );
+
             writtenCounter++;
-            
+
             logRecord.setData( recordData, dataLength );
             log.log( logRecord, true ); //Sync what we logged so far
-            
+
             LogScanner logScanner = log.beginScan( startingPoint );
-            
+
             while ( logScanner.getNextRecord( logRecord ) )
             {
                 userRecord = logRecord.getDataBuffer();
                 assertTrue( logRecord.getDataLength() == dataLength );
-                
+
                 for ( idx = 0; idx < dataLength; idx++ )
                 {
                     assertTrue( userRecord[idx] == readCounter );
                 }
-                
+
                 readCounter++;
             }
-            
+
             assertTrue( writtenCounter == readCounter );
         }
-        catch( IOException e )
+        catch ( IOException e )
         {
             e.printStackTrace();
             fail();
         }
-        catch( InvalidLogException e )
+        catch ( InvalidLogException e )
         {
             e.printStackTrace();
             fail();
         }
     }
-    
-    
+
+
     @Test
     public void testLogSwitchScan()
     {
@@ -153,72 +155,72 @@ public class LogFlushScanTest
         UserLogRecord logRecord = new UserLogRecord();
         byte recordData[] = new byte[dataLength];
         byte userRecord[];
-        
+
         byte writtenCounter = 1;
         byte readCounter = 1;
-        byte maxCounter = 127; 
+        byte maxCounter = 127;
         boolean firstRecord = true;
-        
+
         LogAnchor startingPoint = new LogAnchor();
         LogAnchor endPoint = new LogAnchor();
-        
+
         try
         {
             while ( writtenCounter < maxCounter )
             {
-                Arrays.fill( recordData, (byte)writtenCounter );
-                
+                Arrays.fill( recordData, ( byte ) writtenCounter );
+
                 logRecord.setData( recordData, dataLength );
                 boolean sync = ( ( writtenCounter % 11 ) == 0 ) || ( writtenCounter == ( maxCounter - 1 ) );
                 log.log( logRecord, sync );
-                
+
                 if ( firstRecord )
                 {
-                 // Record the starting point
+                    // Record the starting point
                     startingPoint.resetLogAnchor( logRecord.getLogAnchor() );
                     firstRecord = false;
                 }
-                
+
                 if ( ( writtenCounter == ( maxCounter - 1 ) ) )
                 {
                     endPoint.resetLogAnchor( logRecord.getLogAnchor() );
                 }
-                
+
                 writtenCounter++;
             }
-            
-            assertTrue( endPoint.getLogFileNumber() > startingPoint.getLogFileNumber() ); 
-            
+
+            assertTrue( endPoint.getLogFileNumber() > startingPoint.getLogFileNumber() );
+
             LogScanner logScanner = log.beginScan( startingPoint );
-            
+
             while ( logScanner.getNextRecord( logRecord ) )
             {
                 userRecord = logRecord.getDataBuffer();
                 assertTrue( logRecord.getDataLength() == dataLength );
-                
+
                 for ( idx = 0; idx < dataLength; idx++ )
                 {
                     assertTrue( userRecord[idx] == readCounter );
                 }
-                
+
                 readCounter++;
             }
-            
+
             assertTrue( writtenCounter == readCounter );
-       }
-       catch( IOException e )
-       {
-           e.printStackTrace();
+        }
+        catch ( IOException e )
+        {
+            e.printStackTrace();
+            fail();
+        }
+        catch ( InvalidLogException e )
+        {
+            e.printStackTrace();
             fail();
         }
-       catch( InvalidLogException e )
-       {
-           e.printStackTrace();
-           fail();
-       }
     }
 
-    
+
     @Test
     public void testMultiThreadedAppend() throws InterruptedException
     {
@@ -227,53 +229,53 @@ public class LogFlushScanTest
         UserLogRecord logRecord = new UserLogRecord();
         byte recordData[] = new byte[dataLength];
         byte userRecord[];
-        
+
         LogAnchor startingPoint = new LogAnchor();
-        
+
         logRecord.setData( recordData, dataLength );
-        
+
         try
         {
             log.log( logRecord, false );
         }
-        catch( IOException e )
+        catch ( IOException e )
         {
             e.printStackTrace();
             fail();
         }
-        catch( InvalidLogException e )
+        catch ( InvalidLogException e )
         {
             e.printStackTrace();
             fail();
         }
-        
+
         startingPoint.resetLogAnchor( logRecord.getLogAnchor() );
-        
+
         byte key = 1;
         int numThreads = 4;
         int numAppends = 64;
         int expectedSum = 0;
         int sum = 0;
         MultiThreadedAppend threads[] = new MultiThreadedAppend[numThreads];
-        
+
         for ( idx = 0; idx < numThreads; idx++ )
         {
-            threads[idx] = new MultiThreadedAppend( key , dataLength, numAppends);
+            threads[idx] = new MultiThreadedAppend( key, dataLength, numAppends );
             expectedSum += key * numAppends;
         }
-        
+
         for ( idx = 0; idx < numThreads; idx++ )
         {
             threads[idx].start();
         }
-        
+
         for ( idx = 0; idx < numThreads; idx++ )
         {
             threads[idx].join();
         }
-        
+
         LogScanner logScanner = log.beginScan( startingPoint );
-        
+
         try
         {
             while ( logScanner.getNextRecord( logRecord ) )
@@ -281,73 +283,74 @@ public class LogFlushScanTest
                 userRecord = logRecord.getDataBuffer();
                 assertTrue( logRecord.getDataLength() == dataLength );
                 key = userRecord[0];
-                
+
                 for ( idx = 0; idx < dataLength; idx++ )
                 {
                     assertTrue( userRecord[idx] == key );
                 }
-                
+
                 sum += key;
             }
         }
-        catch( IOException e )
+        catch ( IOException e )
         {
             e.printStackTrace();
             fail();
         }
-        catch( InvalidLogException e )
+        catch ( InvalidLogException e )
         {
             e.printStackTrace();
             fail();
         }
-        
+
         assertTrue( sum == expectedSum );
     }
-    
-    
+
     class MultiThreadedAppend extends Thread
     {
         byte key;
         int dataLength;
         int numAppends;
-                
+
+
         public MultiThreadedAppend( byte key, int dataLength, int numAppends )
         {
             this.key = key;
             this.dataLength = dataLength;
             this.numAppends = numAppends;
         }
-        
-        public void run() 
+
+
+        public void run()
         {
             UserLogRecord logRecord = new UserLogRecord();
             byte recordData[] = new byte[dataLength];
             int idx;
-            
-            Arrays.fill( recordData, (byte)key );
-            
+
+            Arrays.fill( recordData, ( byte ) key );
+
             logRecord.setData( recordData, dataLength );
-            
+
             try
             {
                 for ( idx = 0; idx < numAppends; idx++ )
                 {
                     boolean sync = false;
-                    
-                    if ( ( ( idx % 3 )  == 0 ) || ( idx == numAppends - 1 ) )
+
+                    if ( ( ( idx % 3 ) == 0 ) || ( idx == numAppends - 1 ) )
                     {
                         sync = true;
                     }
-                    
+
                     log.log( logRecord, sync );
                 }
             }
-            catch( IOException e )
+            catch ( IOException e )
             {
                 e.printStackTrace();
                 fail();
             }
-            catch( InvalidLogException e )
+            catch ( InvalidLogException e )
             {
                 e.printStackTrace();
                 fail();

Modified: directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogTest.java?rev=1227712&r1=1227711&r2=1227712&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogTest.java (original)
+++ directory/apacheds/branches/apacheds-txns/core-shared/src/test/java/org/apache/directory/server/core/shared/log/LogTest.java Thu Jan  5 17:28:50 2012
@@ -19,6 +19,7 @@
  */
 package org.apache.directory.server.core.shared.log;
 
+
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -36,6 +37,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
+
 /**
  * Test the Log class implementation.
  *
@@ -45,7 +47,7 @@ public class LogTest
 {
     /** Logger */
     private Log log;
-    
+
     /** log suffix */
     private static String LOG_SUFFIX = "log";
 
@@ -56,11 +58,11 @@ public class LogTest
     /**
      * Get the Log folder
      */
-    private String getLogFolder( ) throws IOException
+    private String getLogFolder() throws IOException
     {
         File newFolder = folder.newFolder( LOG_SUFFIX );
         String file = newFolder.getAbsolutePath();
-        
+
         return file;
     }
 
@@ -75,53 +77,53 @@ public class LogTest
         UserLogRecord userLogRecord = new UserLogRecord();
         byte recordData[] = new byte[dataLength];
         LogAnchor startingLogAnchor = new LogAnchor();
-        
+
         try
         {
             // Log 10 buffers
             for ( int i = 0; i < 10; i++ )
             {
-                Arrays.fill( recordData, (byte )i );
-            
+                Arrays.fill( recordData, ( byte ) i );
+
                 userLogRecord.setData( recordData, dataLength );
                 log.log( userLogRecord, false );
             }
-            
+
             // Sync everything
             log.sync( LogAnchor.UNKNOWN_LSN );
-            
+
             LogScanner logScanner = log.beginScan( startingLogAnchor );
             int recordNumber = 0;
-            
+
             while ( logScanner.getNextRecord( userLogRecord ) )
             {
                 recordData = userLogRecord.getDataBuffer();
                 assertTrue( userLogRecord.getDataLength() == dataLength );
-                
+
                 for ( int idx = 0; idx < dataLength; idx++ )
                 {
                     assertTrue( recordData[idx] == recordNumber );
                 }
-                
+
                 recordNumber++;
             }
-            
+
             // Here, the expected number of record read should be 10
             assertEquals( 10, recordNumber );
         }
-        catch( IOException e )
+        catch ( IOException e )
         {
             e.printStackTrace();
             fail();
         }
-        catch( InvalidLogException e )
+        catch ( InvalidLogException e )
         {
             e.printStackTrace();
             fail();
         }
     }
-    
-    
+
+
     @Test
     public void testLogSmallBuffer() throws IOException, InvalidLogException
     {
@@ -132,44 +134,44 @@ public class LogTest
         UserLogRecord userLogRecord = new UserLogRecord();
         byte recordData[] = new byte[dataLength];
         LogAnchor startingLogAnchor = new LogAnchor();
-        
+
         try
         {
             // Log 10 buffers
             for ( int i = 0; i < 10; i++ )
             {
-                Arrays.fill( recordData, (byte )i );
-            
+                Arrays.fill( recordData, ( byte ) i );
+
                 userLogRecord.setData( recordData, dataLength );
                 log.log( userLogRecord, true );
             }
-            
+
             LogScanner logScanner = log.beginScan( startingLogAnchor );
             int recordNumber = 0;
-            
+
             while ( logScanner.getNextRecord( userLogRecord ) )
             {
                 recordData = userLogRecord.getDataBuffer();
                 assertTrue( userLogRecord.getDataLength() == dataLength );
-                
+
                 for ( int idx = 0; idx < dataLength; idx++ )
                 {
                     assertTrue( recordData[idx] == recordNumber );
                 }
-                
+
                 recordNumber++;
             }
-            
+
             // Here, the expected number of record read should be 10, not 8...
             // assertEquals( 10, recordNumber );
             assertEquals( 10, recordNumber );
         }
-        catch( IOException e )
+        catch ( IOException e )
         {
             e.printStackTrace();
             fail();
         }
-        catch( InvalidLogException e )
+        catch ( InvalidLogException e )
         {
             e.printStackTrace();
             fail();