o made CPB field and checkOffset() method package protected
authorKiran Ayyagari <kayyagari@apache.org>
Fri, 11 Jul 2014 12:35:52 +0000 (12:35 +0000)
committerKiran Ayyagari <kayyagari@apache.org>
Fri, 11 Jul 2014 12:35:52 +0000 (12:35 +0000)
o added a test that demonstrates bad offset values present in CPB after reloading RM

mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java
mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerTest.java

index d2cab27..a6336bb 100644 (file)
@@ -106,7 +106,7 @@ public class RecordManager extends AbstractTransactionManager
      * A B-tree used to manage the page that has been copied in a new version.
      * Those pages can be reclaimed when the associated version is dead.
      **/
-    private BTree<RevisionName, long[]> copiedPageBtree;
+    /* no qualifier */ BTree<RevisionName, long[]> copiedPageBtree;
 
     /** A constant for an offset on a non existing page */
     public static final long NO_PAGE = -1L;
@@ -818,7 +818,7 @@ public class RecordManager extends AbstractTransactionManager
      * @param offset The offset to check
      * @throws InvalidOffsetException If the offset is not valid
      */
-    private void checkOffset( long offset )
+    /* no qualifier */ void checkOffset( long offset )
     {
         if ( ( offset < 0 ) || ( offset > endOfFileOffset ) || ( ( offset % pageSize ) != 0 ) )
         {
index 9d8e1c7..784d241 100644 (file)
@@ -893,4 +893,35 @@ public class RecordManagerTest
         btree.insert( 1L, "V1" );
         btree.insert( 2L, "V2" );
     }
+    
+    @Test
+    @Ignore("Fails with bad offset error")
+    public void testOffsetsInCopiedPageBTree() throws Exception
+    {
+        btree.insert( 1L, "V1" );
+
+        checkCpbOffsets();
+        
+        openRecordManagerAndBtree();
+        
+        checkCpbOffsets();
+    }
+
+    private void checkCpbOffsets() throws Exception
+    {
+        TupleCursor<RevisionName, long[]> cursor = recordManager.copiedPageBtree.browse();
+        
+        while( cursor.hasNext() )
+        {
+            Tuple<RevisionName, long[]> t = cursor.next();
+            long[] offsets = t.getValue();
+            for( long o : offsets )
+            {
+                recordManager.checkOffset( o );
+            }
+        }
+      
+        cursor.close();
+    }
+    
 }