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 2017/12/30 21:42:13 UTC

[directory-mavibot] 03/03: Switched to Caffeine cache. Fixed some test compilation errors

This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch single-value
in repository https://gitbox.apache.org/repos/asf/directory-mavibot.git

commit a2980169496da3d256a2a3d71419849ccd0c7aa1
Author: Emmanuel Lécharny <el...@symas.com>
AuthorDate: Sat Dec 30 22:42:06 2017 +0100

    Switched to Caffeine cache. Fixed some test compilation errors
---
 .../apache/directory/mavibot/btree/BulkLoader.java | 121 ++++++++++-----------
 .../directory/mavibot/btree/RecordManager.java     |  17 +--
 .../directory/mavibot/btree/BTreeBrowseTest.java   |  78 ++++++++++---
 .../directory/mavibot/btree/BulkLoaderTest.java    |  50 +++++----
 .../mavibot/btree/PersistedStoreTest.java          |   6 +-
 .../apache/directory/mavibot/btree/ReadTest.java   |   6 +-
 .../mavibot/btree/RecordManagerFreePageTest.java   |  55 ++++++----
 .../btree/RecordManagerPrivateMethodTest.java      |   2 +-
 8 files changed, 195 insertions(+), 140 deletions(-)

diff --git a/mavibot/src/main/java/org/apache/directory/mavibot/btree/BulkLoader.java b/mavibot/src/main/java/org/apache/directory/mavibot/btree/BulkLoader.java
index b8710a5..b6f818c 100644
--- a/mavibot/src/main/java/org/apache/directory/mavibot/btree/BulkLoader.java
+++ b/mavibot/src/main/java/org/apache/directory/mavibot/btree/BulkLoader.java
@@ -59,7 +59,7 @@ public class BulkLoader<K, V>
     {
     }
 
-    static enum LevelEnum
+    enum LevelEnum
     {
         LEAF,
         NODE
@@ -106,7 +106,7 @@ public class BulkLoader<K, V>
         int nbIteration = 0;
         int nbElems = 0;
         boolean inMemory = true;
-        Set<K> keys = new HashSet<K>();
+        Set<K> keys = new HashSet<>();
 
         while ( true )
         {
@@ -189,45 +189,43 @@ public class BulkLoader<K, V>
     {
         File file = File.createTempFile( "sortedUnique", "data" );
         file.deleteOnExit();
-        FileOutputStream fos = new FileOutputStream( file );
-
         // Number of read elements
         int nbReads = 0;
 
-        // Flush the tuples on disk
-        while ( dataIterator.hasNext() )
+        try ( FileOutputStream fos = new FileOutputStream( file ) )
         {
-            nbReads++;
-
-            // grab a tuple
-            Tuple<K, V> tuple = dataIterator.next();
-
-            // Serialize the key
-            byte[] bytesKey = btree.getKeySerializer().serialize( tuple.key );
-            fos.write( IntSerializer.serialize( bytesKey.length ) );
-            fos.write( bytesKey );
-
-            // Serialize the values
-            V value = tuple.getValue();
-
-            byte[] bytesValue = btree.getValueSerializer().serialize( value );
-
-            // Serialize the value
-            fos.write( IntSerializer.serialize( bytesValue.length ) );
-            fos.write( bytesValue );
+    
+            // Flush the tuples on disk
+            while ( dataIterator.hasNext() )
+            {
+                nbReads++;
+    
+                // grab a tuple
+                Tuple<K, V> tuple = dataIterator.next();
+    
+                // Serialize the key
+                byte[] bytesKey = btree.getKeySerializer().serialize( tuple.key );
+                fos.write( IntSerializer.serialize( bytesKey.length ) );
+                fos.write( bytesKey );
+    
+                // Serialize the values
+                V value = tuple.getValue();
+    
+                byte[] bytesValue = btree.getValueSerializer().serialize( value );
+    
+                // Serialize the value
+                fos.write( IntSerializer.serialize( bytesValue.length ) );
+                fos.write( bytesValue );
+            }
+    
+            fos.flush();
         }
 
-        fos.flush();
-        fos.close();
-
         FileInputStream fis = new FileInputStream( file );
         Iterator<Tuple<K, V>> uniqueIterator = createUniqueFileIterator( btree, fis );
         SortedFile sortedFile = new SortedFile( file, nbReads );
 
-        Tuple<Iterator<Tuple<K, V>>, SortedFile> result = new Tuple<Iterator<Tuple<K, V>>, SortedFile>(
-            uniqueIterator, sortedFile );
-
-        return result;
+        return new Tuple<>( uniqueIterator, sortedFile );
     }
 
 
@@ -257,10 +255,10 @@ public class BulkLoader<K, V>
         boolean inMemory = true;
 
         // The list of files we will use to store the sorted chunks
-        List<File> sortedFiles = new ArrayList<File>();
+        List<File> sortedFiles = new ArrayList<>();
 
         // An array of chunkSize tuple max
-        List<Tuple<K, V>> tuples = new ArrayList<Tuple<K, V>>( chunkSize );
+        List<Tuple<K, V>> tuples = new ArrayList<>( chunkSize );
 
         // Now, start to read all the tuples to sort them. We may use intermediate files
         // for that purpose if we hit the threshold.
@@ -269,7 +267,7 @@ public class BulkLoader<K, V>
         // If the tuple list is empty, we have to process the load based on files, not in memory
         if ( nbElems > 0 )
         {
-            inMemory = tuples.size() > 0;
+            inMemory = !tuples.isEmpty();
         }
 
         // Now that we have processed all the data, we can start storing them in the btree
@@ -327,7 +325,8 @@ public class BulkLoader<K, V>
      */
     /* no qualifier*/static <K, V> LevelInfo<K, V> computeLevel( BTree<K, V> btree, int nbElems, LevelEnum levelType )
     {
-        int pageSize = btree.getPageSize();
+        BTreeInfo<K, V> btreeInfo = btree.getBtreeInfo();
+        int pageSize = btree.getPageNbElem();
         int incrementNode = 0;
 
         if ( levelType == LevelEnum.NODE )
@@ -335,7 +334,7 @@ public class BulkLoader<K, V>
             incrementNode = 1;
         }
 
-        LevelInfo<K, V> level = new LevelInfo<K, V>();
+        LevelInfo<K, V> level = new LevelInfo<>();
         level.setType( ( levelType == LevelEnum.NODE ) );
         level.setNbElems( nbElems );
         level.setNbPages( nbElems / ( pageSize + incrementNode ) );
@@ -355,11 +354,11 @@ public class BulkLoader<K, V>
 
             if ( level.isNode() )
             {
-                level.setCurrentPage( BTreeFactory.createNode( btree, 0L, nbElems - 1 ) );
+                level.setCurrentPage( BTreeFactory.createNode( btreeInfo, 0L, nbElems - 1 ) );
             }
             else
             {
-                level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, nbElems ) );
+                level.setCurrentPage( BTreeFactory.createLeaf( btreeInfo, 0L, nbElems ) );
             }
         }
         else
@@ -372,11 +371,11 @@ public class BulkLoader<K, V>
 
                 if ( level.isNode() )
                 {
-                    level.setCurrentPage( BTreeFactory.createNode( btree, 0L, pageSize ) );
+                    level.setCurrentPage( BTreeFactory.createNode( btreeInfo, 0L, pageSize ) );
                 }
                 else
                 {
-                    level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, pageSize ) );
+                    level.setCurrentPage( BTreeFactory.createLeaf( btreeInfo, 0L, pageSize ) );
                 }
             }
             else
@@ -391,11 +390,11 @@ public class BulkLoader<K, V>
                     {
                         if ( level.isNode() )
                         {
-                            level.setCurrentPage( BTreeFactory.createNode( btree, 0L, pageSize ) );
+                            level.setCurrentPage( BTreeFactory.createNode( btreeInfo, 0L, pageSize ) );
                         }
                         else
                         {
-                            level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, pageSize ) );
+                            level.setCurrentPage( BTreeFactory.createLeaf( btreeInfo, 0L, pageSize ) );
                         }
                     }
                     else
@@ -403,11 +402,11 @@ public class BulkLoader<K, V>
                         if ( level.isNode() )
                         {
                             level
-                                .setCurrentPage( BTreeFactory.createNode( btree, 0L, ( pageSize / 2 ) + remaining - 1 ) );
+                                .setCurrentPage( BTreeFactory.createNode( btreeInfo, 0L, ( pageSize / 2 ) + remaining - 1 ) );
                         }
                         else
                         {
-                            level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, ( pageSize / 2 ) + remaining ) );
+                            level.setCurrentPage( BTreeFactory.createLeaf( btreeInfo, 0L, ( pageSize / 2 ) + remaining ) );
                         }
                     }
                 }
@@ -417,11 +416,11 @@ public class BulkLoader<K, V>
 
                     if ( level.isNode() )
                     {
-                        level.setCurrentPage( BTreeFactory.createNode( btree, 0L, pageSize ) );
+                        level.setCurrentPage( BTreeFactory.createNode( btreeInfo, 0L, pageSize ) );
                     }
                     else
                     {
-                        level.setCurrentPage( BTreeFactory.createLeaf( btree, 0L, pageSize ) );
+                        level.setCurrentPage( BTreeFactory.createLeaf( btreeInfo, 0L, pageSize ) );
                     }
                 }
             }
@@ -475,8 +474,8 @@ public class BulkLoader<K, V>
 
     private static <K, V> int computeNbElemsLeaf( BTree<K, V> btree, LevelInfo<K, V> levelInfo )
     {
-        int pageSize = btree.getPageSize();
-        int remaining = levelInfo.getNbElems() - levelInfo.getNbAddedElems();
+        int pageSize = btree.getPageNbElem();
+        int remaining = levelInfo.getNbElemsLimit() - levelInfo.getNbAddedElems();
 
         if ( remaining < pageSize )
         {
@@ -486,7 +485,7 @@ public class BulkLoader<K, V>
         {
             return pageSize;
         }
-        else if ( remaining > levelInfo.getNbElems() - levelInfo.getNbElemsLimit() )
+        else if ( remaining > levelInfo.getNbElemsLimit() - levelInfo.getNbElemsLimit() )
         {
             return pageSize;
         }
@@ -502,8 +501,8 @@ public class BulkLoader<K, V>
      */
     /* No qualifier */int computeNbElemsNode( BTree<K, V> btree, LevelInfo<K, V> levelInfo )
     {
-        int pageSize = btree.getPageSize();
-        int remaining = levelInfo.getNbElems() - levelInfo.getNbAddedElems();
+        int pageSize = btree.getPageNbElem();
+        int remaining = levelInfo.getNbElemsLimit() - levelInfo.getNbAddedElems();
 
         if ( remaining < pageSize + 1 )
         {
@@ -513,7 +512,7 @@ public class BulkLoader<K, V>
         {
             return pageSize + 1;
         }
-        else if ( remaining > levelInfo.getNbElems() - levelInfo.getNbElemsLimit() )
+        else if ( remaining > levelInfo.getNbElemsLimit() - levelInfo.getNbElemsLimit() )
         {
             return pageSize + 1;
         }
@@ -527,7 +526,7 @@ public class BulkLoader<K, V>
     /**
      * Inject a page reference into the root page.
      */
-    private static <K, V> void injectInRoot( BTree<K, V> btree, Page<K, V> page, PageHolder<K, V> pageHolder,
+    private static <K, V> void injectInRoot( BTree<K, V> btree, Page<K, V> page, long child,
         LevelInfo<K, V> level ) throws IOException
     {
         Node<K, V> node = ( Node<K, V> ) level.getCurrentPage();
@@ -772,7 +771,7 @@ public class BulkLoader<K, V>
     }
 
 
-    private static <K, V> BTree<K, V> bulkLoadSinglePage( BTree<K, V> btree, Iterator<Tuple<K, V>> dataIterator,
+    private static <K, V> BTree<K, V> bulkLoadSinglePage( WriteTransaction writeTransaction, BTree<K, V> btree, Iterator<Tuple<K, V>> dataIterator,
         int nbElems ) throws IOException
     {
         // Use the root page
@@ -821,15 +820,15 @@ public class BulkLoader<K, V>
      * Construct the target BTree from the sorted data. We will use the nb of elements
      * to determinate the structure of the BTree, as it must be balanced
      */
-    private static <K, V> BTree<K, V> bulkLoad( BTree<K, V> btree, Iterator<Tuple<K, V>> dataIterator, int nbElems )
+    private static <K, V> BTree<K, V> bulkLoad( WriteTransaction writeTransaction, BTree<K, V> btree, Iterator<Tuple<K, V>> dataIterator, int nbElems )
         throws IOException
     {
-        int pageSize = btree.getPageSize();
+        int pageSize = btree.getBtreeInfo().getPageNbElem();
 
-        // Special case : we can store all the element sin a single page
+        // Special case : we can store all the elements in a single page
         if ( nbElems <= pageSize )
         {
-            return bulkLoadSinglePage( btree, dataIterator, nbElems );
+            return bulkLoadSinglePage( writeTransaction, btree, dataIterator, nbElems );
         }
 
         // Ok, we will need more than one page to store the elements, which
@@ -1002,7 +1001,7 @@ public class BulkLoader<K, V>
             {} );
 
         // First, eliminate the equals keys. We use a map for that
-        Map<K, V> mapTuples = new HashMap<K, V>();
+        Map<K, V> mapTuples = new HashMap<>();
 
         for ( Tuple<K, V> tuple : tuplesArray )
         {
@@ -1012,13 +1011,13 @@ public class BulkLoader<K, V>
             if ( foundSet != null )
             {
                 // We already have had such a key, add the value to the existing key
-                foundSet.add( tuple.value );
+                foundSet = tuple.value;
             }
             else
             {
                 // No such key present in the map : create a new set to store the values,
                 // and add it in the map associated with the new key
-                V set = new TreeV();
+                V set = new TreeMap<>( );
                 set.add( tuple.value );
                 mapTuples.put( tuple.key, set );
             }
diff --git a/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java b/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java
index d1e04db..24285fe 100644
--- a/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java
+++ b/mavibot/src/main/java/org/apache/directory/mavibot/btree/RecordManager.java
@@ -54,11 +54,9 @@ import org.apache.directory.mavibot.btree.serializer.LongSerializer;
 import org.apache.directory.mavibot.btree.util.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.ehcache.Cache;
-import org.ehcache.CacheManager;
-import org.ehcache.config.builders.CacheConfigurationBuilder;
-import org.ehcache.config.builders.CacheManagerBuilder;
-import org.ehcache.config.builders.ResourcePoolsBuilder;
+
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
 
 
 /**
@@ -238,12 +236,7 @@ public class RecordManager implements TransactionManager
         }
         
         // Create the cache
-        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
-            .withCache( "pageCache", CacheConfigurationBuilder.
-                newCacheConfigurationBuilder( Long.class, Page.class, 
-                ResourcePoolsBuilder.heap( cacheSize ) ) ).build( true );
-
-        pageCache = cacheManager.getCache( "pageCache", Long.class, Page.class ); 
+        pageCache = Caffeine.newBuilder().maximumSize( cacheSize ).build();
 
         // We have to create a new file, if it does not already exist
         boolean isNewFile = createFile( tmpFile );
@@ -2459,7 +2452,7 @@ public class RecordManager implements TransactionManager
      */
     /* no qualifier */<K, V> Page<K, V> getPage( BTreeInfo btreeInfo, int pageSize, long offset ) throws IOException
     {
-        Page<K, V> page = ( Page<K, V> )pageCache.get( offset );
+        Page<K, V> page = pageCache.getIfPresent( offset );
         
         if ( page == null )
         {
diff --git a/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeBrowseTest.java b/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeBrowseTest.java
index ab2f07f..e45d4f7 100644
--- a/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeBrowseTest.java
+++ b/mavibot/src/test/java/org/apache/directory/mavibot/btree/BTreeBrowseTest.java
@@ -41,6 +41,7 @@ import org.apache.directory.mavibot.btree.exception.EndOfFileExceededException;
 import org.apache.directory.mavibot.btree.exception.KeyNotFoundException;
 import org.apache.directory.mavibot.btree.serializer.LongSerializer;
 import org.apache.directory.mavibot.btree.serializer.StringSerializer;
+//import org.ehcache.impl.internal.classes.commonslang.SystemUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -122,8 +123,9 @@ public class BTreeBrowseTest
                 recordManager.close();
             }
 
+            System.out.println( "File : " + dataDir.getAbsolutePath() );
             // Now, try to reload the file back
-            recordManager = new RecordManager( dataDir.getAbsolutePath() );
+            recordManager = new RecordManager( dataDir.getAbsolutePath(), 1024, 1000 );
 
             try ( Transaction transaction = recordManager.beginReadTransaction() )
             {
@@ -652,9 +654,10 @@ public class BTreeBrowseTest
     public void testAddRandom() throws Exception
     {
         // Inject some data
-        long increment = 1_000L;
+        long increment = 100_000L;
         long nbRound = 100_000L;
         long t0 = System.currentTimeMillis();
+        btree.setPageNbElem( 32 );  // Long + String(long) : 8 bytes + [2 - 10] bytes, max, 56 elems/page
 
         long[] values = new long[(int)nbRound];
         
@@ -682,32 +685,79 @@ public class BTreeBrowseTest
 
         long t1 = System.currentTimeMillis();
         
-        System.out.println( "Delta for " + nbRound + " : " + ( t1 - t0 ) );
+        System.out.println( "Delta for " + nbRound + " writes : " + ( t1 - t0 ) );
         
         //MavibotInspector.check( recordManager );
+        long[] counters = new long[12];
+        long smaller = Long.MAX_VALUE;
+        long higher =  0L;
+        long sum = 0L;
+        Random rand = new Random( System.nanoTime() ); 
 
-        int counter = 0;
-
-        try ( Transaction readTxn = recordManager.beginReadTransaction() )
+        for ( int k = 0; k < 12; k++ )
         {
-            BTree<Long, String> btree = readTxn.getBTree( "test" );
-            TupleCursor<Long, String> cursor = btree.browse( readTxn );
+            long tread0 = System.currentTimeMillis();
     
-            while ( cursor.hasNext() )
+            for ( int i = 0; i < 1_00; i++ )
             {
-                cursor.next();
-                counter++;
+                int counter = 0;
+                try ( Transaction readTxn = recordManager.beginReadTransaction() )
+                {
+                    BTree<Long, String> btree = readTxn.getBTree( "test" );
+                    
+                    for ( int j = 0; j < 100_000; j++ )
+                    {
+                        long key = Math.abs( rand.nextLong()%100_000L );
+                        btree.get( readTxn, key );
+                        counter++;
+                    }
+                    
+                    /*
+                    TupleCursor<Long, String> cursor = btree.browse( readTxn );
+            
+                    while ( cursor.hasNext() )
+                    {
+                        cursor.next();
+                        counter++;
+                    }
+                    */
+                }
+            
+                assertEquals( nbRound, counter );
             }
+
+            long tread1 = System.currentTimeMillis();
+
+            System.out.println( "Delta for " + ( nbRound * 1000 ) + " reads[" + k + "] : " + ( tread1 - tread0 ) );
+            counters[k] = ( tread1 - tread0 );
+            
+            if ( counters[k] < smaller )
+            {
+                smaller = counters[k];
+            }
+            
+            if ( counters[k] > higher )
+            {
+                higher = counters[k];
+            }
+            
+            sum += counters[k];
+            
+            System.out.println( "Hits   : " + recordManager.nbCacheHits );
+            System.out.println( "Misses : " + recordManager.nbCacheMisses );
         }
         
-        assertEquals( nbRound, counter );
+        sum -= smaller;
+        sum -= higher;
         
+        System.out.println( "Average : " + ( sum / 10 ) );
+
         // Now delete the elements
         shuffle( values );
         
         long tt0 = System.currentTimeMillis();
 
-        increment = 1L;
+        //increment = 1L;
         
         for ( long i = 0; i < nbRound/increment; i++ )
         {
@@ -728,7 +778,7 @@ public class BTreeBrowseTest
 
         long tt1 = System.currentTimeMillis();
         
-        System.out.println( "Delta for " + nbRound + " : " + ( tt1 - tt0 ) );
+        System.out.println( "Delta for " + nbRound + " deletes : " + ( tt1 - tt0 ) );
     }
     
     
diff --git a/mavibot/src/test/java/org/apache/directory/mavibot/btree/BulkLoaderTest.java b/mavibot/src/test/java/org/apache/directory/mavibot/btree/BulkLoaderTest.java
index 657dccc..f2078ef 100644
--- a/mavibot/src/test/java/org/apache/directory/mavibot/btree/BulkLoaderTest.java
+++ b/mavibot/src/test/java/org/apache/directory/mavibot/btree/BulkLoaderTest.java
@@ -921,10 +921,12 @@ public class BulkLoaderTest
         try
         {
             RecordManager rm = new RecordManager( file.getAbsolutePath() );
-            BTree<Long, String> btree = ( BTree<Long, String> ) rm.addBTree( "test",
-                LongSerializer.INSTANCE, StringSerializer.INSTANCE );
-
-            // btree.valueThresholdUp = 8;
+            
+            try ( WriteTransaction writeTransaction = rm.beginWriteTransaction() )
+            {
+                BTree<Long, String> btree = ( BTree<Long, String> ) rm.addBTree( writeTransaction, "test",
+                    LongSerializer.INSTANCE, StringSerializer.INSTANCE );
+            }
 
             Iterator<Tuple<Long, String>> tupleIterator = new Iterator<Tuple<Long, String>>()
             {
@@ -956,29 +958,33 @@ public class BulkLoaderTest
             long t0 = System.currentTimeMillis();
             BTree<Long, String> result = null;
 
-            result = BulkLoader.load( btree, tupleIterator, 128 );
-
-            TupleCursor<Long, String> cursor = result.browse();
-            int nbFetched = 0;
-            Tuple<Long, String> prev = null;
-            Tuple<Long, String> elem = null;
+            result = BulkLoader.load( result, tupleIterator, 128 );
 
-            long t2 = System.currentTimeMillis();
-
-            try
+            try ( Transaction transaction = rm.beginReadTransaction() )
             {
-                while ( cursor.hasNext() )
+                BTree<Long, String> btree = rm.getBtree( transaction, "test" );
+                TupleCursor<Long, String> cursor = result.browse( transaction );
+                int nbFetched = 0;
+                Tuple<Long, String> prev = null;
+                Tuple<Long, String> elem = null;
+    
+                long t2 = System.currentTimeMillis();
+    
+                try
+                {
+                    while ( cursor.hasNext() )
+                    {
+                        prev = elem;
+                        elem = cursor.next();
+                        nbFetched++;
+                    }
+                }
+                catch ( Exception e )
                 {
-                    prev = elem;
-                    elem = cursor.next();
-                    nbFetched++;
+                    System.out.println( "--->" + prev );
+                    e.printStackTrace();
                 }
             }
-            catch ( Exception e )
-            {
-                System.out.println( "--->" + prev );
-                e.printStackTrace();
-            }
 
             long t3 = System.currentTimeMillis();
         }
diff --git a/mavibot/src/test/java/org/apache/directory/mavibot/btree/PersistedStoreTest.java b/mavibot/src/test/java/org/apache/directory/mavibot/btree/PersistedStoreTest.java
index 07fa0dc..319ab34 100644
--- a/mavibot/src/test/java/org/apache/directory/mavibot/btree/PersistedStoreTest.java
+++ b/mavibot/src/test/java/org/apache/directory/mavibot/btree/PersistedStoreTest.java
@@ -51,7 +51,7 @@ public class PersistedStoreTest
         File tempFile = tempFolder.newFile( "mavibot.db" );
         String tempFileName = tempFile.getAbsolutePath();
 
-        RecordManager recordManager = new RecordManager( tempFileName, 4 * 1024 );
+        RecordManager recordManager = new RecordManager( tempFileName, 4 * 1024, 1000 );
         Method method = RecordManager.class.getDeclaredMethod( "store", RecordManagerHeader.class, long.class, int.class, PageIO[].class );
         method.setAccessible( true );
 
@@ -143,7 +143,7 @@ public class PersistedStoreTest
         File tempFile = tempFolder.newFile( "mavibot.db" );
         String tempFileName = tempFile.getAbsolutePath();
 
-        RecordManager recordManager = new RecordManager( tempFileName, 4 * 1024 );
+        RecordManager recordManager = new RecordManager( tempFileName, 4 * 1024, 1000 );
         Method method = RecordManager.class.getDeclaredMethod( "store", RecordManagerHeader.class, long.class, long.class, PageIO[].class );
         method.setAccessible( true );
 
@@ -324,7 +324,7 @@ public class PersistedStoreTest
         String tempFileName = tempFile.getAbsolutePath();
 
         // We use smaller pages
-        RecordManager recordManager = new RecordManager( tempFileName, 32 );
+        RecordManager recordManager = new RecordManager( tempFileName, 32, 1000 );
         Method storeMethod = RecordManager.class.getDeclaredMethod( "store", RecordManagerHeader.class, long.class, byte[].class, PageIO[].class );
         storeMethod.setAccessible( true );
 
diff --git a/mavibot/src/test/java/org/apache/directory/mavibot/btree/ReadTest.java b/mavibot/src/test/java/org/apache/directory/mavibot/btree/ReadTest.java
index c6af5d3..e142a67 100644
--- a/mavibot/src/test/java/org/apache/directory/mavibot/btree/ReadTest.java
+++ b/mavibot/src/test/java/org/apache/directory/mavibot/btree/ReadTest.java
@@ -55,7 +55,7 @@ public class ReadTest
         String tempFileName = tempFile.getAbsolutePath();
 
         // Create page size of 32 only
-        RecordManager recordManager = new RecordManager( tempFileName, 32 );
+        RecordManager recordManager = new RecordManager( tempFileName, 32, 1000 );
         Method storeMethod = RecordManager.class.getDeclaredMethod( "store", RecordManagerHeader.class, long.class, int.class, PageIO[].class );
         Method readIntMethod = RecordManager.class.getDeclaredMethod( "readInt", int.class, PageIO[].class, long.class );
         storeMethod.setAccessible( true );
@@ -133,7 +133,7 @@ public class ReadTest
         String tempFileName = tempFile.getAbsolutePath();
 
         // Create page size of 32 only
-        RecordManager recordManager = new RecordManager( tempFileName, 32 );
+        RecordManager recordManager = new RecordManager( tempFileName, 32, 1000 );
         Method storeMethod = RecordManager.class.getDeclaredMethod( "store", RecordManagerHeader.class, long.class, long.class, PageIO[].class );
         Method readLongMethod = RecordManager.class.getDeclaredMethod( "readLong", int.class, PageIO[].class, long.class );
         storeMethod.setAccessible( true );
@@ -245,7 +245,7 @@ public class ReadTest
         String tempFileName = tempFile.getAbsolutePath();
 
         // We use smaller pages
-        RecordManager recordManager = new RecordManager( tempFileName, 32 );
+        RecordManager recordManager = new RecordManager( tempFileName, 32, 1000 );
         Method storeMethod = RecordManager.class.getDeclaredMethod( "store", RecordManagerHeader.class, long.class, byte[].class, 
             PageIO[].class );
         Method readBytesMethod = RecordManager.class.getDeclaredMethod( "readBytes", int.class, PageIO[].class, long.class );
diff --git a/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerFreePageTest.java b/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerFreePageTest.java
index 399f05b..562db8c 100644
--- a/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerFreePageTest.java
+++ b/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerFreePageTest.java
@@ -66,10 +66,10 @@ public class RecordManagerFreePageTest
 
         openRecordManagerAndBtree();
 
-        try
+        try ( WriteTransaction writeTxn = recordManager1.beginWriteTransaction() )
         {
             // Create a new BTree
-            btree = recordManager1.addBTree( "test", LongSerializer.INSTANCE, StringSerializer.INSTANCE );
+            btree = recordManager1.addBTree( writeTxn, "test", LongSerializer.INSTANCE, StringSerializer.INSTANCE );
         }
         catch ( Exception e )
         {
@@ -109,7 +109,10 @@ public class RecordManagerFreePageTest
             // load the last created btree
             if ( btree != null )
             {
-                btree = recordManager1.getBtree( btree.getName() );
+                try ( Transaction transaction = recordManager1.beginReadTransaction() )
+                {
+                    btree = recordManager1.getBtree( transaction, btree.getName() );
+                }
             }
         }
         catch ( Exception e )
@@ -127,7 +130,7 @@ public class RecordManagerFreePageTest
     @Test
     public void testRecordManager() throws IOException, BTreeAlreadyManagedException, KeyNotFoundException, CursorException
     {
-        assertEquals( 1, recordManager1.getNbManagedTrees() );
+        assertEquals( 3, recordManager1.getNbManagedTrees( recordManager1.getCurrentRecordManagerHeader() ) );
 
         Set<String> managedBTrees = recordManager1.getManagedTrees();
 
@@ -146,18 +149,21 @@ public class RecordManagerFreePageTest
             Long key = ( long ) i;
             String value = Long.toString( key );
 
-            btree.insert( key, value );
-
-            if ( i % 10000 == 0 )
+            try ( WriteTransaction writeTransaction = recordManager1.beginWriteTransaction() )
             {
-                if ( n > 0 )
+                btree.insert( writeTransaction, key, value );
+    
+                if ( i % 10000 == 0 )
                 {
-                    long t0 = System.currentTimeMillis();
-                    System.out.println( "Written " + i + " elements in : " + ( t0 - delta ) + "ms" );
-                    delta = t0;
+                    if ( n > 0 )
+                    {
+                        long t0 = System.currentTimeMillis();
+                        System.out.println( "Written " + i + " elements in : " + ( t0 - delta ) + "ms" );
+                        delta = t0;
+                    }
+    
+                    n++;
                 }
-
-                n++;
             }
         }
 
@@ -181,24 +187,25 @@ public class RecordManagerFreePageTest
 
         openRecordManagerAndBtree();
 
-        assertEquals( 1, recordManager1.getNbManagedTrees() );
+        assertEquals( 3, recordManager1.getNbManagedTrees( recordManager1.getCurrentRecordManagerHeader() ) );
 
         assertTrue( nbElems == btree.getNbElems() );
-
-        TupleCursor<Long, String> cursor = btree.browse();
-
         long i = 0;
 
-        while ( cursor.hasNext() )
+        try ( Transaction transaction = recordManager1.beginReadTransaction() )
         {
-            Tuple<Long, String> t = cursor.next();
-            assertEquals( ( Long ) i, t.getKey() );
-            assertEquals( String.valueOf( i ), t.getValue() );
-            i++;
+            try ( TupleCursor<Long, String> cursor = btree.browse( transaction ) )
+            {
+                while ( cursor.hasNext() )
+                {
+                    Tuple<Long, String> t = cursor.next();
+                    assertEquals( ( Long ) i, t.getKey() );
+                    assertEquals( String.valueOf( i ), t.getValue() );
+                    i++;
+                }
+            }
         }
 
-        cursor.close();
-
         assertEquals( nbElems, i );
     }
 }
diff --git a/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerPrivateMethodTest.java b/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerPrivateMethodTest.java
index 027f026..2d40e39 100644
--- a/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerPrivateMethodTest.java
+++ b/mavibot/src/test/java/org/apache/directory/mavibot/btree/RecordManagerPrivateMethodTest.java
@@ -62,7 +62,7 @@ public class RecordManagerPrivateMethodTest
         System.out.println( dataDir + "/mavibot.db" );
 
         // Now, try to reload the file back
-        recordManager = new RecordManager( dataDir.getAbsolutePath(), 32 );
+        recordManager = new RecordManager( dataDir.getAbsolutePath(), 32, 1000 );
 
         // Create a new BTree
         try ( WriteTransaction writeTransaction = recordManager.beginWriteTransaction() )

-- 
To stop receiving notification emails like this one, please contact
"commits@directory.apache.org" <co...@directory.apache.org>.