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