Author: elecharny
Date: Wed Jul 24 11:47:51 2013
New Revision: 1506505

URL: http://svn.apache.org/r1506505
Log:
o Update the lastOffset of pages
o Update the BTree header when we do an update in the BTree, otherwise the old 
rootPage would be pointed by the BTree and by the FreePages list, and be reused 
by another BTree, leading to inconsistencies.
o We don't anymore update the lastFreePage (it's useless)
o Commented the checkRoot() method, it's not yet completed

Modified:
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
    
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/RecordManager.java

Modified: 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java?rev=1506505&r1=1506504&r2=1506505&view=diff
==============================================================================
--- 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java 
(original)
+++ 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java 
Wed Jul 24 11:47:51 2013
@@ -884,6 +884,11 @@ public class BTree<K, V>
                     // Store the offset on disk in the page in memory
                     ( ( AbstractPage<K, V> ) modifiedPage ).setOffset( ( ( 
ReferenceHolder<Page<K, V>, K, V> ) holder )
                         .getOffset() );
+
+                    // Store the last offset on disk in the page in memory
+                    ( ( AbstractPage<K, V> ) modifiedPage )
+                        .setLastOffset( ( ( ReferenceHolder<Page<K, V>, K, V> 
) holder )
+                            .getLastOffset() );
                 }
 
                 // This is a new root
@@ -1182,6 +1187,10 @@ public class BTree<K, V>
                 // Store the offset on disk in the page in memory
                 ( ( AbstractPage<K, V> ) modifiedPage ).setOffset( ( ( 
ReferenceHolder<Page<K, V>, K, V> ) holder )
                     .getOffset() );
+
+                // Store the last offset on disk in the page in memory
+                ( ( AbstractPage<K, V> ) modifiedPage ).setLastOffset( ( ( 
ReferenceHolder<Page<K, V>, K, V> ) holder )
+                    .getLastOffset() );
             }
 
             // The root has just been modified, we haven't split it
@@ -1212,6 +1221,10 @@ public class BTree<K, V>
                 ( ( AbstractPage ) splitResult.getLeftPage() )
                     .setOffset( ( ( ReferenceHolder ) holderLeft ).getOffset() 
);
 
+                // Store the last offset on disk in the page
+                ( ( AbstractPage ) splitResult.getLeftPage() )
+                    .setLastOffset( ( ( ReferenceHolder ) holderLeft 
).getLastOffset() );
+
                 ElementHolder<Page<K, V>, K, V> holderRight = 
recordManager.writePage( this,
                     rightPage, revision );
 
@@ -1219,6 +1232,10 @@ public class BTree<K, V>
                 ( ( AbstractPage<K, V> ) splitResult.getRightPage() )
                     .setOffset( ( ( ReferenceHolder ) holderRight 
).getOffset() );
 
+                // Store the last offset on disk in the page
+                ( ( AbstractPage<K, V> ) splitResult.getRightPage() )
+                    .setLastOffset( ( ( ReferenceHolder ) holderRight 
).getLastOffset() );
+
                 // Create the new rootPage
                 newRootPage = new Node<K, V>( this, revision, pivot, 
holderLeft, holderRight );
             }
@@ -1237,6 +1254,9 @@ public class BTree<K, V>
 
                 // Store the offset on disk in the page
                 ( ( AbstractPage<K, V> ) newRootPage ).setOffset( ( ( 
ReferenceHolder ) holder ).getOffset() );
+
+                // Store the last offset on disk in the page
+                ( ( AbstractPage<K, V> ) newRootPage ).setLastOffset( ( ( 
ReferenceHolder ) holder ).getLastOffset() );
             }
 
             rootPage = newRootPage;
@@ -1253,18 +1273,17 @@ public class BTree<K, V>
         if ( modifiedValue == null )
         {
             btreeHeader.incrementNbElems();
-
-            // If the BTree is managed, we have to update the rootPage on disk
-            if ( isManaged() )
-            {
-                // Update the BTree header now
-                recordManager.updateBtreeHeader( this, ( ( AbstractPage<K, V> 
) rootPage ).getOffset() );
-            }
         }
 
+        // If the BTree is managed, we have to update the rootPage on disk
         if ( isManaged() )
         {
+            // Update the BTree header now
+            recordManager.updateBtreeHeader( this, ( ( AbstractPage<K, V> ) 
rootPage ).getOffset() );
+
+            // Moved the free pages into the list of free pages
             recordManager.addFreePages( this, ( List ) result.getCopiedPages() 
);
+
             // Store the created rootPage into the revision BTree, this will 
be stored in RecordManager only if revisions are set to keep
             recordManager.storeRootPage( this, rootPage );
         }

Modified: 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/RecordManager.java
URL: 
http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/RecordManager.java?rev=1506505&r1=1506504&r2=1506505&view=diff
==============================================================================
--- 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/RecordManager.java
 (original)
+++ 
labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/RecordManager.java
 Wed Jul 24 11:47:51 2013
@@ -2129,7 +2129,6 @@ public class RecordManager
                     // We don't have yet any free pageIos. The
                     // PageIOs for this Page will be used
                     firstFreePage = firstOffset;
-                    lastFreePage = lastOffset;
                 }
                 else
                 {
@@ -2558,9 +2557,11 @@ public class RecordManager
         Class<?> valueSerializer = Class.forName( valueSerializerFqcn );
         Class<?> keySerializer = Class.forName( keySerializerFqcn );
 
+        /*
         checkRoot( checkedPages, rootPageOffset, pageSize, nbElems,
             ( ElementSerializer<?> ) keySerializer.newInstance(),
             ( ElementSerializer<?> ) valueSerializer.newInstance(), 
allowDuplicates != 0 );
+        */
 
         return nextBTreeOffset;
     }
@@ -2639,9 +2640,6 @@ public class RecordManager
     {
         try
         {
-            System.out.println( "Checking..." );
-
-            // First the header
             // First check the header
             ByteBuffer header = ByteBuffer.allocate( HEADER_SIZE );
             long fileSize = fileChannel.size();



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to