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 2014/05/04 00:15:37 UTC
svn commit: r1592287 -
/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java
Author: elecharny
Date: Sat May 3 22:15:36 2014
New Revision: 1592287
URL: http://svn.apache.org/r1592287
Log:
o Added the checkOffset helper method
o Checked the RecordManagerHeader pointers (BOB and CPB)
At this point, we should check the BOB and CPB before checking the other trees
Modified:
directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java
Modified: directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java?rev=1592287&r1=1592286&r2=1592287&view=diff
==============================================================================
--- directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java (original)
+++ directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java Sat May 3 22:15:36 2014
@@ -225,16 +225,7 @@ public class MavibotInspector
// and its value must be a modulo of pageSize
long firstFreePage = recordManagerHeader.getLong();
- if ( firstFreePage > fileSize )
- {
- throw new InvalidBTreeException( "First free page pointing after the end of the file : "
- + firstFreePage );
- }
-
- if ( ( firstFreePage != RecordManager.NO_PAGE ) && ( ( ( firstFreePage - RecordManager.RECORD_MANAGER_HEADER_SIZE ) % pageSize ) != 0 ) )
- {
- throw new InvalidBTreeException( "First free page not pointing to a correct offset : " + firstFreePage );
- }
+ checkOffset( recordManager, firstFreePage, pageSize );
int nbPageBits = ( int ) ( nbPages / RecordManager.INT_SIZE );
@@ -246,6 +237,32 @@ public class MavibotInspector
// Then the free files
checkFreePages( recordManager, checkedPages, pageSize, firstFreePage );
+ // The B-trees offsets
+ long currentBtreeOfBtreesOffset = recordManagerHeader.getLong();
+ long previousBtreeOfBtreesOffset = recordManagerHeader.getLong();
+ long currentCopiedPagesBtreeOffset = recordManagerHeader.getLong();
+ long previousCopiedPagesBtreeOffset = recordManagerHeader.getLong();
+
+ // Check that the previous BOB offset is not pointing to something
+ if ( previousBtreeOfBtreesOffset != RecordManager.NO_PAGE )
+ {
+ throw new InvalidBTreeException( "The previous Btree of Btrees offset is not valid : "
+ + previousBtreeOfBtreesOffset );
+ }
+
+ // Check that the previous CPB offset is not pointing to something
+ if ( previousCopiedPagesBtreeOffset != RecordManager.NO_PAGE )
+ {
+ throw new InvalidBTreeException( "The previous Copied Pages Btree offset is not valid : "
+ + previousCopiedPagesBtreeOffset );
+ }
+
+ // Check that the current BOB offset is valid
+ checkOffset( recordManager, currentBtreeOfBtreesOffset, pageSize );
+
+ // Check that the current CPB offset is valid
+ checkOffset( recordManager, currentCopiedPagesBtreeOffset, pageSize );
+
// The B-trees
checkBtrees( recordManager, checkedPages, pageSize, nbBtrees );
}
@@ -260,6 +277,28 @@ public class MavibotInspector
/**
+ * Check the offset to be sure it's a valid one :
+ * <ul>
+ * <li>It's >= 0</li>
+ * <li>It's below the end of the file</li>
+ * <li>It's a multiple of the pageSize
+ * </ul>
+ * @param offset The offset to check
+ * @param pageSize the page size
+ * @throws InvalidOffsetException If the offset is not valid
+ */
+ private static void checkOffset( RecordManager recordManager, long offset, int pageSize ) throws IOException
+ {
+ if ( ( offset == RecordManager.NO_PAGE ) ||
+ ( ( ( offset - RecordManager.RECORD_MANAGER_HEADER_SIZE ) % pageSize ) != 0 ) ||
+ ( offset > recordManager.fileChannel.size() ) )
+ {
+ throw new InvalidBTreeException( "Invalid Offset : " + offset );
+ }
+ }
+
+
+ /**
* Check each B-tree we manage
* @throws IOException
* @throws EndOfFileExceededException