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 02:55:42 UTC
svn commit: r1592304 - in
/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree:
MavibotInspector.java RecordManager.java
Author: elecharny
Date: Sun May 4 00:55:42 2014
New Revision: 1592304
URL: http://svn.apache.org/r1592304
Log:
o Added some more methods to check the btrees. We now have a dedicated method for the BOB and CPB checks (not yet finished).
o Added a helper method to update the checkedPges
o the checkBtrees is not called, as it's buggy.
More to come...
Modified:
directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/MavibotInspector.java
directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.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=1592304&r1=1592303&r2=1592304&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 Sun May 4 00:55:42 2014
@@ -227,7 +227,7 @@ public class MavibotInspector
checkOffset( recordManager, firstFreePage, pageSize );
- int nbPageBits = ( int ) ( nbPages / RecordManager.INT_SIZE );
+ int nbPageBits = ( int ) ( nbPages / 32 );
// Create an array of pages to be checked
// We use one bit per page. It's 0 when the page
@@ -263,8 +263,17 @@ public class MavibotInspector
// Check that the current CPB offset is valid
checkOffset( recordManager, currentCopiedPagesBtreeOffset, pageSize );
+ // Now, check the BTree of Btrees
+ BTree<NameRevision, Long> btreeOfBtrees = BTreeFactory.<NameRevision, Long> createInMemoryBTree();
+ checkBtreeOfBtrees( recordManager, checkedPages, pageSize, btreeOfBtrees );
+
+ // And the Copied Pages BTree
+ checkCopiedPagesBtree( recordManager, checkedPages, pageSize );
+
// The B-trees
- checkBtrees( recordManager, checkedPages, pageSize, nbBtrees );
+ //checkBtrees( recordManager, checkedPages, pageSize, nbBtrees );
+
+ dumpCheckedPages( recordManager, checkedPages );
}
catch ( Exception e )
{
@@ -275,6 +284,82 @@ public class MavibotInspector
}
}
+
+ /**
+ * Check the Btree of Btrees
+ *
+ * @param checkedPages
+ * @param pageSize
+ * @throws IOException
+ * @throws EndOfFileExceededException
+ * @throws NoSuchFieldException
+ * @throws SecurityException
+ * @throws IllegalArgumentException
+ * @throws InstantiationException
+ * @throws IllegalAccessException
+ * @throws ClassNotFoundException
+ */
+ private static <K, V> void checkBtreeOfBtrees( RecordManager recordManager, int[] checkedPages, int pageSize, BTree<K, V> btree ) throws EndOfFileExceededException, IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, IllegalArgumentException, SecurityException, NoSuchFieldException
+ {
+ // Read the BOB header
+ PageIO[] bobHeaderPageIos = recordManager.readPageIOs( recordManager.currentBtreeOfBtreesOffset, Long.MAX_VALUE );
+
+ // update the checkedPages
+ updateCheckedPages( checkedPages, pageSize, bobHeaderPageIos );
+
+ //checkBtree( checkedPages, pageSize, bobHeaderPageIos, btree );
+ }
+
+
+ /**
+ * Check the Copied pages Btree
+ *
+ * @param checkedPages
+ * @param pageSize
+ * @throws IOException
+ * @throws EndOfFileExceededException
+ */
+ private static void checkCopiedPagesBtree( RecordManager recordManager, int[] checkedPages, int pageSize ) throws EndOfFileExceededException, IOException
+ {
+ // Read the CPB header
+ PageIO[] cpbHeaderPageIos = recordManager.readPageIOs( recordManager.currentCopiedPagesBtreeOffset, Long.MAX_VALUE );
+
+ // update the checkedPages
+ updateCheckedPages( checkedPages, pageSize, cpbHeaderPageIos );
+
+ //checkBtree( checkedPages, pageSize, bobHeaderPageIos, btree );
+ }
+
+
+ /**
+ * Update the array of seen pages.
+ */
+ private static void updateCheckedPages( int[] checkedPages, int pageSize, PageIO... pageIos )
+ {
+ for ( PageIO pageIO : pageIos )
+ {
+ long offset = pageIO.getOffset();
+
+ if ( ( offset % pageSize ) != 0 )
+ {
+ throw new InvalidBTreeException( "Offset invalid : " + offset );
+ }
+
+ int pageNumber = (int)(offset / pageSize);
+ int nbBitsPage = ( RecordManager.INT_SIZE << 3 );
+ int pageMask = checkedPages[ pageNumber / nbBitsPage ];
+ int mask = 1 << pageNumber % nbBitsPage;
+
+ if ( ( pageMask & mask ) != 0 )
+ {
+ throw new InvalidBTreeException( "The page " + offset + " has already been referenced" );
+ }
+
+ pageMask |= mask;
+ checkedPages[ pageNumber / nbBitsPage ] = pageMask;
+ }
+ }
+
/**
* Check the offset to be sure it's a valid one :
Modified: directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java?rev=1592304&r1=1592303&r2=1592304&view=diff
==============================================================================
--- directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java (original)
+++ directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java Sun May 4 00:55:42 2014
@@ -172,13 +172,13 @@ public class RecordManager extends Abstr
private static final String COPIED_PAGE_BTREE_NAME = "_copiedPageBtree_";
/** The current B-tree of B-trees header offset */
- private long currentBtreeOfBtreesOffset;
+ /* no qualifier */ long currentBtreeOfBtreesOffset;
/** The previous B-tree of B-trees header offset */
private long previousBtreeOfBtreesOffset = NO_PAGE;
/** The offset on the current copied pages B-tree */
- private long currentCopiedPagesBtreeOffset = NO_PAGE;
+ /* no qualifier */ long currentCopiedPagesBtreeOffset = NO_PAGE;
/** The offset on the previous copied pages B-tree */
private long previousCopiedPagesBtreeOffset = NO_PAGE;