You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sa...@apache.org on 2011/10/30 08:55:16 UTC

svn commit: r1195128 - in /directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log: DefaultLogScanner.java LogFlushManager.java LogManager.java

Author: saya
Date: Sun Oct 30 07:55:16 2011
New Revision: 1195128

URL: http://svn.apache.org/viewvc?rev=1195128&view=rev
Log:
fixed checksum related issues:
*cheksum was not computed for the case user buffer was larger than the internal log buffer
*checksump update updates the current checksum with the given data. To make the computed checksum predicatable, we need to call reset() on the checksum before computing the new checksum.

Modified:
    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/LogFlushManager.java
    directory/apacheds/branches/apacheds-txns/core/src/main/java/org/apache/directory/server/core/log/LogManager.java

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=1195128&r1=1195127&r2=1195128&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 Sun Oct 30 07:55:16 2011
@@ -177,6 +177,7 @@ public class DefaultLogScanner implement
             readLogRecord( logRecord, recordLength - ( LogFileRecords.RECORD_HEADER_SIZE + LogFileRecords.RECORD_FOOTER_SIZE ));
             
             // Read and verify footer
+            checksum.reset();
             checksum.update( logRecord.getDataBuffer(), 0, logRecord.getDataLength() );
             readRecordFooter( (int)checksum.getValue() );
             

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=1195128&r1=1195127&r2=1195128&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 Sun Oct 30 07:55:16 2011
@@ -137,6 +137,11 @@ import org.apache.directory.server.i18n.
         {
             lsn = logLSN++;
             
+            
+            // Compute the checksum for the user record
+            checksum.reset();
+            checksum.update( userBuffer, 0, length );
+            
             if ( currentLogFile == null )
             {
                 // We are just starting, get the current log file
@@ -177,8 +182,7 @@ import org.apache.directory.server.i18n.
                             // Write the data
                             writeHead.put( userBuffer, 0, length );
                             
-                            // Compute the checksum and write the footer
-                            checksum.update( userBuffer, 0, length );
+                            // Write the footeer
                             writeFooter( writeHead, (int)checksum.getValue() );
                             
                             appendedRecord = true;
@@ -212,8 +216,7 @@ import org.apache.directory.server.i18n.
                             // Write the data
                             writeHead.put( userBuffer, 0, length );
 
-                            // Compute the checksum and write the footer
-                            checksum.update( userBuffer, 0, length );
+                            // Write the footer
                             writeFooter( writeHead, (int)checksum.getValue() );
 
                             appendedRecord = true;
@@ -386,7 +389,7 @@ import org.apache.directory.server.i18n.
                 currentLogFile.append( userBuffer, offset, length );   
                 
                 headerFooterHead.rewind();
-                writeFooter( headerFooterHead, 0 );
+                writeFooter( headerFooterHead, (int)checksum.getValue() );
                 currentLogFile.append( logBuffer.headerFooterBuffer, 0, LogFileRecords.RECORD_FOOTER_SIZE );
     
                 flushedLSN = flushLSN;

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=1195128&r1=1195127&r2=1195128&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 Sun Oct 30 07:55:16 2011
@@ -361,6 +361,7 @@ import org.apache.directory.server.i18n.
         controlFileMarker.putLong( controlFileRecord.minNeededLSN );
         
         // Compute the checksum
+        checksum.reset();
         checksum.update( controlFileMarker.array(), 0, CONTROLFILE_CHECKSUM_SIZE );
         controlFileRecord.checksum = checksum.getValue();
         
@@ -424,6 +425,7 @@ import org.apache.directory.server.i18n.
         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 ) ||