You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by el...@apache.org on 2013/07/24 13:47:52 UTC

svn commit: r1506505 - in /labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree: BTree.java RecordManager.java

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: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org