You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2014/05/19 12:57:09 UTC
svn commit: r1595827 -
/directory/apacheds/trunk/mavibot-partition/src/main/java/org/apache/directory/mavibot/btree/MavibotPartitionBuilder.java
Author: kayyagari
Date: Mon May 19 10:57:09 2014
New Revision: 1595827
URL: http://svn.apache.org/r1595827
Log:
fixed the page corruption issue due to freeing the newly created root page
Modified:
directory/apacheds/trunk/mavibot-partition/src/main/java/org/apache/directory/mavibot/btree/MavibotPartitionBuilder.java
Modified: directory/apacheds/trunk/mavibot-partition/src/main/java/org/apache/directory/mavibot/btree/MavibotPartitionBuilder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/mavibot-partition/src/main/java/org/apache/directory/mavibot/btree/MavibotPartitionBuilder.java?rev=1595827&r1=1595826&r2=1595827&view=diff
==============================================================================
--- directory/apacheds/trunk/mavibot-partition/src/main/java/org/apache/directory/mavibot/btree/MavibotPartitionBuilder.java (original)
+++ directory/apacheds/trunk/mavibot-partition/src/main/java/org/apache/directory/mavibot/btree/MavibotPartitionBuilder.java Mon May 19 10:57:09 2014
@@ -136,13 +136,14 @@ public class MavibotPartitionBuilder
{
PersistedBTree btree = ( PersistedBTree ) rm.getManagedTree( name );
- btree.setRevision( btree.getRevision() + 1 );
+ long newRevision = btree.getRevision() + 1;
+ btree.setRevision( newRevision );
List<Page> lstLeaves = new ArrayList<Page>();
int totalTupleCount = 0;
- Page leaf1 = BTreeFactory.createLeaf( btree, 0, numKeysInNode );
+ Page leaf1 = BTreeFactory.createLeaf( btree, newRevision, numKeysInNode );
lstLeaves.add( leaf1 );
int leafIndex = 0;
@@ -176,9 +177,9 @@ public class MavibotPartitionBuilder
{
leafIndex = 0;
- PageHolder pageHolder = ( PageHolder ) rm.writePage( btree, leaf1, 1 );
+ PageHolder pageHolder = ( PageHolder ) rm.writePage( btree, leaf1, newRevision );
- leaf1 = createLeaf( btree, 0, numKeysInNode );
+ leaf1 = createLeaf( btree, newRevision, numKeysInNode );
lstLeaves.add( leaf1 );
}
@@ -207,7 +208,7 @@ public class MavibotPartitionBuilder
lastLeaf.values = ( ValueHolder[] ) Array.newInstance( ValueHolder.class, n );
System.arraycopy( values, 0, lastLeaf.values, 0, n );
- PageHolder pageHolder = ( PageHolder ) rm.writePage( btree, lastLeaf, 1 );
+ PageHolder pageHolder = ( PageHolder ) rm.writePage( btree, lastLeaf, newRevision );
break;
}
@@ -217,6 +218,8 @@ public class MavibotPartitionBuilder
// there is already a root page created
Page rootPage = attachNodes( lstLeaves, btree );
+ Page oldRoot = btree.getRootPage();
+
//System.out.println("built rootpage : " + rootPage);
btree.setNbElems( totalTupleCount );
@@ -237,9 +240,7 @@ public class MavibotPartitionBuilder
// Store the new revision
btree.storeRevision( header );
- //rm.updateBtreeHeader( btree, newBtreeHeaderOffset );
-
- rm.freePages( ( BTree ) btree, btree.getRevision(), ( List ) Arrays.asList( btree.getRootPage() ) );
+ rm.freePages( ( BTree ) btree, btree.getRevision(), ( List ) Arrays.asList( oldRoot ) );
return btree;
}
@@ -257,7 +258,7 @@ public class MavibotPartitionBuilder
int numChildren = numKeysInNode + 1;
- PersistedNode node = ( PersistedNode ) createNode( btree, 0, numKeysInNode );
+ PersistedNode node = ( PersistedNode ) createNode( btree, btree.getRevision(), numKeysInNode );
lstNodes.add( node );
int i = 0;
int totalNodes = 0;
@@ -280,7 +281,7 @@ public class MavibotPartitionBuilder
PageHolder pageHolder = ( PageHolder ) rm.writePage( btree, node, 1 );
- node = ( PersistedNode ) createNode( btree, 0, numKeysInNode );
+ node = ( PersistedNode ) createNode( btree, btree.getRevision(), numKeysInNode );
lstNodes.add( node );
}
}
@@ -456,11 +457,11 @@ public class MavibotPartitionBuilder
idSortedSet.addAll( sortedDnSet );
- System.out.println( "Sorted on ID" );
- for ( DnTuple dt : idSortedSet )
- {
- System.out.println( dt );
- }
+// System.out.println( "Sorted on ID" );
+// for ( DnTuple dt : idSortedSet )
+// {
+// System.out.println( dt );
+// }
Iterator<Tuple> entryItr = new Iterator<Tuple>()
{
@@ -568,11 +569,11 @@ public class MavibotPartitionBuilder
parentIdRdnSortedSet.addAll( sortedDnSet );
- System.out.println( "Sorted on ParentID and RDNs" );
- for ( DnTuple dt : parentIdRdnSortedSet )
- {
- System.out.println( dt );
- }
+// System.out.println( "Sorted on ParentID and RDNs" );
+// for ( DnTuple dt : parentIdRdnSortedSet )
+// {
+// System.out.println( dt );
+// }
Iterator<Tuple> parentIdAndRdnFwdItr = new Iterator<Tuple>()
{
@@ -717,8 +718,9 @@ public class MavibotPartitionBuilder
try
{
- //System.out.println("Building index " + id.getAttribute().getName() );
- //buildIndex( id );
+ System.out.println("Building index " + id.getAttribute().getName() );
+ // TODO the presence index needs a special treatment
+ buildIndex( id );
}
catch( Exception e )
{
@@ -876,27 +878,27 @@ public class MavibotPartitionBuilder
}
- public void testBTree()
+ public void testBTree( String name )
{
try
{
- BTree tree = partition.getRecordMan().getManagedTree( masterTableName );
- System.out.println( "The number of elements in master btree " + tree.getNbElems() );
- TupleCursor<String, Entry> cursor = tree.browse();
+ BTree tree = partition.getRecordMan().getManagedTree( name );
+ System.out.println( "The number of elements in the btree " + tree.getNbElems() );
+ TupleCursor cursor = tree.browse();
while ( cursor.hasNext() )
{
System.out.println( cursor.next() );
}
cursor.close();
- Index idx = partition.getRdnIndex();
- org.apache.directory.api.ldap.model.cursor.Cursor idxCur = idx.forwardCursor();
- while( idxCur.next() )
- {
- System.out.println( idxCur.get() );
- }
-
- idxCur.close();
+// Index idx = partition.getRdnIndex();
+// org.apache.directory.api.ldap.model.cursor.Cursor idxCur = idx.forwardCursor();
+// while( idxCur.next() )
+// {
+// System.out.println( idxCur.get() );
+// }
+//
+// idxCur.close();
}
catch( Exception e )
{
@@ -911,7 +913,7 @@ public class MavibotPartitionBuilder
createPartition();
- testBTree();
+ testBTree( masterTableName );
SearchRequest req = new SearchRequestImpl();
req.setBase( new Dn( schemaManager, suffixDn ) );
@@ -956,8 +958,16 @@ public class MavibotPartitionBuilder
MavibotPartitionBuilder builder = new MavibotPartitionBuilder( file.getAbsolutePath(), "ou=builder",
outDir.getAbsolutePath() );
builder.buildPartition();
- //builder.testBTree();
+
+
+ String fwdRdnTree = ApacheSchemaConstants.APACHE_RDN_AT_OID + MavibotRdnIndex.FORWARD_BTREE;
+ builder.testBTree( fwdRdnTree );
+
+ String revRdnTree = ApacheSchemaConstants.APACHE_RDN_AT_OID + MavibotRdnIndex.REVERSE_BTREE;
+ builder.testBTree( fwdRdnTree );
builder.testPartition();
+
+ //builder.testBTree( builder.masterTableName );
//*/
/*
MavibotPartitionBuilder builder = new MavibotPartitionBuilder( "/tmp/builder-test.ldif", "ou=builder",