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/02/27 01:44:06 UTC
svn commit: r1572368 - in
/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree:
BTreeHeader.java InMemoryBTree.java PersistedBTree.java
Author: elecharny
Date: Thu Feb 27 00:44:06 2014
New Revision: 1572368
URL: http://svn.apache.org/r1572368
Log:
o Injecting the rootPage in the BTreeHeader will compute the rootPageOffset if needed (no need to inject it)
o Added the rollback() call in the insert method
o Written the rootPage on disk when we have a split
Modified:
directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java
directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/InMemoryBTree.java
directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedBTree.java
Modified: directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java?rev=1572368&r1=1572367&r2=1572368&view=diff
==============================================================================
--- directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java (original)
+++ directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/BTreeHeader.java Thu Feb 27 00:44:06 2014
@@ -225,6 +225,7 @@ import java.util.concurrent.atomic.Atomi
/* no qualifier */ void setRootPage( Page<K, V> rootPage )
{
this.rootPage = rootPage;
+ this.rootPageOffset = ((AbstractPage<K, V>)rootPage).getOffset();
}
Modified: directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/InMemoryBTree.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/InMemoryBTree.java?rev=1572368&r1=1572367&r2=1572368&view=diff
==============================================================================
--- directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/InMemoryBTree.java (original)
+++ directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/InMemoryBTree.java Thu Feb 27 00:44:06 2014
@@ -835,7 +835,6 @@ import org.slf4j.LoggerFactory;
newBtreeHeader.setRevision( revision );
newBtreeHeader.setNbElems( btreeHeader.getNbElems() );
newBtreeHeader.setRootPage( btreeHeader.getRootPage() );
- newBtreeHeader.setRootPageOffset( btreeHeader.getRootPageOffset() );
return newBtreeHeader;
}
Modified: directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedBTree.java
URL: http://svn.apache.org/viewvc/directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedBTree.java?rev=1572368&r1=1572367&r2=1572368&view=diff
==============================================================================
--- directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedBTree.java (original)
+++ directory/mavibot/branches/with-txns/mavibot/src/main/java/org/apache/directory/mavibot/btree/PersistedBTree.java Thu Feb 27 00:44:06 2014
@@ -403,20 +403,26 @@ public class PersistedBTree<K, V> extend
recordManager.beginTransaction();
- // Try to insert the new value in the tree at the right place,
- // starting from the root page. Here, the root page may be either
- // a Node or a Leaf
- InsertResult<K, V> result = processInsert( key, value, revision );
-
- // We can safely free the copied pages
- //recordManager.freePages( this, revision, result.getCopiedPages() );
-
- // If the B-tree is managed, we have to update the rootPage on disk
- // Update the RecordManager header
- commit();
+ try
+ {
+ // Try to insert the new value in the tree at the right place,
+ // starting from the root page. Here, the root page may be either
+ // a Node or a Leaf
+ InsertResult<K, V> result = processInsert( key, value, revision );
- // Return the value we have found if it was modified
- return result;
+ // Done ! we can commit now
+ commit();
+
+ // Return the value we have found if it was modified
+ return result;
+ }
+ catch ( IOException ioe )
+ {
+ // if we've got an error, we have to rollback
+ rollback();
+
+ throw ioe;
+ }
}
@@ -425,13 +431,14 @@ public class PersistedBTree<K, V> extend
*/
private InsertResult<K, V> processInsert( K key, V value, long revision ) throws IOException
{
+ // Get the current B-tree header, and insert the value into it
BTreeHeader<K, V> btreeHeader = getBtreeHeader();
InsertResult<K, V> result = btreeHeader.getRootPage().insert( key, value, revision );
// Create a new BTreeHeader
BTreeHeader<K, V> newBtreeHeader = btreeHeader.copy();
- // Inject the old btreeHeader into the pages to be freed
+ // Inject the old B-tree header into the pages to be freed
// if we are inserting an element in a management BTree
if ( btreeType == BTreeTypeEnum.PERSISTED_MANAGEMENT )
{
@@ -451,9 +458,6 @@ public class PersistedBTree<K, V> extend
newRootPage = modifyResult.getModifiedPage();
- // Write the new root page on disk
- PageHolder<K, V> newRootPageHolder = writePage( newRootPage, revision );
-
// Increment the counter if we have inserted a new value
if ( modifyResult.getModifiedValue() == null )
{
@@ -483,10 +487,11 @@ public class PersistedBTree<K, V> extend
newBtreeHeader.incrementNbElems();
}
+ // Write the new root page on disk
+ writePage( newRootPage, revision );
+
// Update the new B-tree header
- long newRootPageOffset = ((AbstractPage<K, V>)newRootPage).getOffset();
newBtreeHeader.setRootPage( newRootPage );
- newBtreeHeader.setRootPageOffset( newRootPageOffset );
newBtreeHeader.setRevision( revision );
// Write down the data on disk