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/04/05 07:03:11 UTC

svn commit: r1464824 - in /labs/mavibot/branches/mavibot-multivalue-support/mavibot/src: main/java/org/apache/mavibot/btree/BTree.java test/java/org/apache/mavibot/btree/RecordManagerTest.java

Author: elecharny
Date: Fri Apr  5 05:03:11 2013
New Revision: 1464824

URL: http://svn.apache.org/r1464824
Log:
Implemented the BTree.contains(revision, K, V) method, with tests

Modified:
    labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
    labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/test/java/org/apache/mavibot/btree/RecordManagerTest.java

Modified: labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
URL: http://svn.apache.org/viewvc/labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java?rev=1464824&r1=1464823&r2=1464824&view=diff
==============================================================================
--- labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java (original)
+++ labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java Fri Apr  5 05:03:11 2013
@@ -1020,6 +1020,24 @@ public class BTree<K, V>
 
 
     /**
+     * Checks if the BTree contains the given key with the given value for a given revision
+     * 
+     * @param revision The revision we would like to browse
+     * @param key The key we are looking for
+     * @param value The value associated with the given key
+     * @return true if the key and value are associated with each other, false otherwise
+     * @throws KeyNotFoundException 
+     */
+    public boolean contains( long revision, K key, V value ) throws IOException, KeyNotFoundException
+    {
+        // Fetch the root page for this revision
+        Page<K, V> revisionRootPage = getRootPage( revision );
+
+        return revisionRootPage.contains( key, value );
+    }
+
+
+    /**
      * Creates a cursor starting at the beginning of the tree
      * 
      * @return A cursor on the btree

Modified: labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/test/java/org/apache/mavibot/btree/RecordManagerTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/test/java/org/apache/mavibot/btree/RecordManagerTest.java?rev=1464824&r1=1464823&r2=1464824&view=diff
==============================================================================
--- labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/test/java/org/apache/mavibot/btree/RecordManagerTest.java (original)
+++ labs/mavibot/branches/mavibot-multivalue-support/mavibot/src/test/java/org/apache/mavibot/btree/RecordManagerTest.java Fri Apr  5 05:03:11 2013
@@ -652,4 +652,113 @@ public class RecordManagerTest
             // expected
         }
     }
+
+
+    /**
+     * Test a get() from a given revision
+     */
+    @Test
+    public void testContainWithRevision() throws IOException, BTreeAlreadyManagedException,
+        KeyNotFoundException
+    {
+        File tempFile = File.createTempFile( "mavibot", ".db" );
+        String tempFileName = tempFile.getAbsolutePath();
+        tempFile.deleteOnExit();
+
+        RecordManager recordManager = new RecordManager( tempFileName, 32 );
+
+        assertNotNull( recordManager );
+
+        // Create a new BTree
+        BTree<Long, String> btree = new BTree<Long, String>( "test", new LongSerializer(), new StringSerializer() );
+        btree.setKeepRevisions( true );
+
+        // And make it managed by the RM
+        recordManager.manage( btree );
+
+        // Now, add some elements in the BTree
+        btree.insert( 3L, "V3" );
+        long rev1 = btree.getRevision();
+
+        btree.insert( 1L, "V1" );
+        long rev2 = btree.getRevision();
+
+        btree.insert( 5L, "V5" );
+        long rev3 = btree.getRevision();
+
+        // Delete one element
+        btree.delete( 3L );
+        long rev4 = btree.getRevision();
+
+        // Check that we can get a value from each revision
+        // revision 1
+        assertFalse( btree.contains( rev1, 1L, "V1" ) );
+        assertTrue( btree.contains( rev1, 3L, "V3" ) );
+        assertFalse( btree.contains( rev1, 5L, "V5" ) );
+
+        // revision 2
+        assertTrue( btree.contains( rev2, 1L, "V1" ) );
+        assertTrue( btree.contains( rev2, 3L, "V3" ) );
+        assertFalse( btree.contains( rev2, 5L, "V5" ) );
+
+        // revision 3
+        assertTrue( btree.contains( rev3, 1L, "V1" ) );
+        assertTrue( btree.contains( rev3, 3L, "V3" ) );
+        assertTrue( btree.contains( rev3, 5L, "V5" ) );
+
+        // revision 4
+        assertTrue( btree.contains( rev4, 1L, "V1" ) );
+        assertFalse( btree.contains( rev4, 3L, "V3" ) );
+        assertTrue( btree.contains( rev4, 5L, "V5" ) );
+
+        // Now, try to reload the file back
+        RecordManager recordManager1 = new RecordManager( tempFileName );
+
+        assertEquals( 1, recordManager1.getNbManagedTrees() );
+
+        Set<String> managedBTrees = recordManager1.getManagedTrees();
+
+        assertEquals( 1, managedBTrees.size() );
+        assertTrue( managedBTrees.contains( "test" ) );
+
+        BTree<Long, String> btree1 = recordManager1.getManagedTree( "test" );
+
+        assertNotNull( btree1 );
+        assertEquals( btree.getComparator().getClass().getName(), btree1.getComparator().getClass().getName() );
+        assertEquals( btree.getFile(), btree1.getFile() );
+        assertEquals( btree.getKeySerializer().getClass().getName(), btree1.getKeySerializer().getClass().getName() );
+        assertEquals( btree.getName(), btree1.getName() );
+        assertEquals( btree.getNbElems(), btree1.getNbElems() );
+        assertEquals( btree.getPageSize(), btree1.getPageSize() );
+        assertEquals( btree.getRevision(), btree1.getRevision() );
+        assertEquals( btree.getValueSerializer().getClass().getName(), btree1.getValueSerializer().getClass().getName() );
+
+        // Check the stored element
+        assertTrue( btree1.hasKey( 1L ) );
+        assertFalse( btree1.hasKey( 3L ) );
+        assertTrue( btree1.hasKey( 5L ) );
+        assertEquals( "V1", btree1.get( 1L ) );
+        assertEquals( "V5", btree1.get( 5L ) );
+
+        // Check that we can get a value from each revision
+        // revision 1
+        assertFalse( btree.contains( rev1, 1L, "V1" ) );
+        assertTrue( btree.contains( rev1, 3L, "V3" ) );
+        assertFalse( btree.contains( rev1, 5L, "V5" ) );
+
+        // revision 2
+        assertTrue( btree.contains( rev2, 1L, "V1" ) );
+        assertTrue( btree.contains( rev2, 3L, "V3" ) );
+        assertFalse( btree.contains( rev2, 5L, "V5" ) );
+
+        // revision 3
+        assertTrue( btree.contains( rev3, 1L, "V1" ) );
+        assertTrue( btree.contains( rev3, 3L, "V3" ) );
+        assertTrue( btree.contains( rev3, 5L, "V5" ) );
+
+        // revision 4
+        assertTrue( btree.contains( rev4, 1L, "V1" ) );
+        assertFalse( btree.contains( rev4, 3L, "V3" ) );
+        assertTrue( btree.contains( rev4, 5L, "V5" ) );
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org