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