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/03/15 14:23:14 UTC

svn commit: r1456947 - in /labs/mavibot/trunk/mavibot/src: main/java/org/apache/mavibot/btree/ main/java/org/apache/mavibot/btree/store/ test/java/org/apache/mavibot/btree/

Author: elecharny
Date: Fri Mar 15 13:23:14 2013
New Revision: 1456947

URL: http://svn.apache.org/r1456947
Log:
Refactored the ValueHolder to make it easier to understand and to use

Added:
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ElementHolder.java
      - copied, changed from r1456886, labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ValueHolder.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryHolder.java
      - copied, changed from r1456886, labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryValueHolder.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceHolder.java
      - copied, changed from r1456886, labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceValueHolder.java
Removed:
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryValueHolder.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceValueHolder.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ValueHolder.java
Modified:
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTreeFactory.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Leaf.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java
    labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/store/RecordManager.java
    labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java

Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java?rev=1456947&r1=1456946&r2=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTree.java Fri Mar 15 13:23:14 2013
@@ -1464,15 +1464,24 @@ public class BTree<K, V>
      * @param value The value to store
      * @return The value holder
      */
-    /* no qualifier */ValueHolder<K, V> createHolder( V value )
+    /* no qualifier */ElementHolder<V, K, V> createHolder( V value )
     {
         if ( type == BTreeTypeEnum.MANAGED )
         {
-            return new ReferenceValueHolder<K, V>( this, value, -1L );
+            if ( value instanceof Page )
+            {
+                return new ReferenceHolder<V, K, V>( this, value, -1L );
+            }
+            else
+            {
+                // Atm, keep the values in memory
+                return new MemoryHolder<K, V>( this, value );
+
+            }
         }
         else
         {
-            return new MemoryValueHolder<K, V>( this, value );
+            return new MemoryHolder<K, V>( this, value );
         }
     }
 

Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTreeFactory.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTreeFactory.java?rev=1456947&r1=1456946&r2=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTreeFactory.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/BTreeFactory.java Fri Mar 15 13:23:14 2013
@@ -223,7 +223,7 @@ public class BTreeFactory
      * @param pos The position in the values array
      * @param value the value to inject
      */
-    public static void setValue( Leaf page, int pos, ValueHolder value )
+    public static void setValue( Leaf page, int pos, ElementHolder value )
     {
         page.setValue( pos, value );
     }
@@ -234,7 +234,7 @@ public class BTreeFactory
      * @param pos The position in the values array
      * @param value the value to inject
      */
-    public static void setValue( Node page, int pos, ValueHolder value )
+    public static void setValue( Node page, int pos, ElementHolder value )
     {
         page.setValue( pos, value );
     }

Copied: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ElementHolder.java (from r1456886, labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ValueHolder.java)
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ElementHolder.java?p2=labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ElementHolder.java&p1=labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ValueHolder.java&r1=1456886&r2=1456947&rev=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ValueHolder.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ElementHolder.java Fri Mar 15 13:23:14 2013
@@ -25,15 +25,20 @@ package org.apache.mavibot.btree;
  * BTree), we will use a SoftReference to keep a reference to a Value, and if it's null,
  * then we will load the Value from the underlying physical support, using the offset. 
  * 
- * @param <V> The type for the stored value
+ * @param <E> The type for the stored element (either a value or a page)
+ * @param <K> The type of the BTree key
+ * @param <V> The type of the BTree value
  *
  * @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
  */
-public interface ValueHolder<K, V>
+public interface ElementHolder<E, K, V>
 {
     /**
-     * @param btree The Btree storing the value
-     * @return The stored value
+     * Get back the element
+     * 
+     * @param btree The Btree storing the element
+     * 
+     * @return The stored element
      */
-    V getValue( BTree<K, V> btree );
+    E getValue( BTree<K, V> btree );
 }

Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Leaf.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Leaf.java?rev=1456947&r1=1456946&r2=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Leaf.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Leaf.java Fri Mar 15 13:23:14 2013
@@ -38,7 +38,7 @@ import org.apache.mavibot.btree.exceptio
 public class Leaf<K, V> extends AbstractPage<K, V>
 {
     /** Values associated with keys */
-    protected ValueHolder<K, V>[] values;
+    protected ElementHolder<V, K, V>[] values;
 
 
     /**
@@ -59,7 +59,7 @@ public class Leaf<K, V> extends Abstract
     {
         super( btree, revision, nbElems );
 
-        this.values = ( ValueHolder<K, V>[] ) Array.newInstance( ValueHolder.class, nbElems );
+        this.values = ( MemoryHolder<K, V>[] ) Array.newInstance( MemoryHolder.class, nbElems );
     }
 
 
@@ -95,11 +95,11 @@ public class Leaf<K, V> extends Abstract
             // and to add this page to the list of modified pages
             if ( btree.isManaged() )
             {
-                ValueHolder holder = btree.getRecordManager()
+                ElementHolder holder = btree.getRecordManager()
                     .modifyPage( btree, this, revision, modifiedPage, revision );
 
                 // Store the offset on disk in the page
-                ( ( AbstractPage<K, V> ) modifiedPage ).setOffset( ( ( ReferenceValueHolder ) holder ).getOffset() );
+                ( ( AbstractPage<K, V> ) modifiedPage ).setOffset( ( ( ReferenceHolder ) holder ).getOffset() );
             }
 
             InsertResult<K, V> result = new ModifyResult<K, V>( modifiedPage, null );
@@ -272,7 +272,7 @@ public class Leaf<K, V> extends Abstract
     {
         // The sibling is on the left, borrow the rightmost element
         K siblingKey = sibling.keys[sibling.getNbElems() - 1];
-        ValueHolder<K, V> siblingValue = sibling.values[sibling.getNbElems() - 1];
+        ElementHolder<V, K, V> siblingValue = sibling.values[sibling.getNbElems() - 1];
 
         // Create the new sibling, with one less element at the end
         Leaf<K, V> newSibling = ( Leaf<K, V> ) sibling.copy( revision, sibling.getNbElems() - 1 );
@@ -316,7 +316,7 @@ public class Leaf<K, V> extends Abstract
     {
         // The sibling is on the left, borrow the rightmost element
         K siblingKey = sibling.keys[0];
-        ValueHolder<K, V> siblingHolder = sibling.values[0];
+        ElementHolder<V, K, V> siblingHolder = sibling.values[0];
 
         // Create the new sibling
         Leaf<K, V> newSibling = new Leaf<K, V>( btree, revision, sibling.getNbElems() - 1 );
@@ -424,7 +424,7 @@ public class Leaf<K, V> extends Abstract
     /**
      * {@inheritDoc}
      */
-    public ValueHolder<K, V> getValue( int pos )
+    public ElementHolder<V, K, V> getValue( int pos )
     {
         if ( pos < nbElems )
         {
@@ -442,7 +442,7 @@ public class Leaf<K, V> extends Abstract
      * @param pos The position in the values array
      * @param value the value to inject
      */
-    public void setValue( int pos, ValueHolder<K, V> value )
+    public void setValue( int pos, ElementHolder<V, K, V> value )
     {
         values[pos] = value;
     }
@@ -580,7 +580,7 @@ public class Leaf<K, V> extends Abstract
         Leaf<K, V> newLeaf = new Leaf<K, V>( btree, revision, nbElems + 1 );
 
         // Atm, store the value in memory 
-        ValueHolder<K, V> valueHolder = new MemoryValueHolder<K, V>( btree, value );
+        MemoryHolder<K, V> valueHolder = new MemoryHolder<K, V>( btree, value );
         //ValueHolder<K, V> valueHolder = btree.createHolder( value );
 
         // Deal with the special case of an empty page
@@ -629,7 +629,7 @@ public class Leaf<K, V> extends Abstract
         int middle = btree.getPageSize() >> 1;
         Leaf<K, V> leftLeaf = null;
         Leaf<K, V> rightLeaf = null;
-        ValueHolder<K, V> valueHolder = btree.createHolder( value );
+        ElementHolder<V, K, V> valueHolder = btree.createHolder( value );
 
         // Determinate where to store the new value
         if ( pos <= middle )

Copied: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryHolder.java (from r1456886, labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryValueHolder.java)
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryHolder.java?p2=labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryHolder.java&p1=labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryValueHolder.java&r1=1456886&r2=1456947&rev=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryValueHolder.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/MemoryHolder.java Fri Mar 15 13:23:14 2013
@@ -23,29 +23,30 @@ package org.apache.mavibot.btree;
 /**
  * A In-Memory Value holder. The value is always present in memory.
  * 
- * @param <V> The type for the stored value
+ * @param <K> The type of the BTree key
+ * @param <V> The type of the BTree value
  *
  * @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
  */
-public class MemoryValueHolder<K, V> implements ValueHolder<K, V>
+public class MemoryHolder<K, V> implements ElementHolder<V, K, V>
 {
     /** The BTree */
     private BTree<K, V> btree;
 
     /** The reference to the Value instance, or null if it's not present */
-    private V reference;
+    private V value;
 
 
     /**
-     * Create a new holder storing an offest and a SoftReference containing the value.
+     * Create a new holder storing an offset and a SoftReference containing the value.
      * 
      * @param offset The offset in disk for this value
      * @param value The value to store into a SoftReference
      */
-    public MemoryValueHolder( BTree<K, V> btree, V value )
+    public MemoryHolder( BTree<K, V> btree, V value )
     {
         this.btree = btree;
-        this.reference = value;
+        this.value = value;
     }
 
 
@@ -55,7 +56,7 @@ public class MemoryValueHolder<K, V> imp
     @Override
     public V getValue( BTree<K, V> btree )
     {
-        return reference;
+        return value;
     }
 
 

Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java?rev=1456947&r1=1456946&r2=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/Node.java Fri Mar 15 13:23:14 2013
@@ -776,9 +776,9 @@ public class Node<K, V> extends Abstract
      * @param pos The position in the values array
      * @param value the value to inject
      */
-    public void setValue( int pos, ValueHolder<K, V> value )
+    public void setValue( int pos, ElementHolder<Page<K, V>, K, V> value )
     {
-        children[pos] = ( Page<K, V> ) value.getValue( btree );
+        children[pos] = value.getValue( btree );
     }
 
 

Copied: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceHolder.java (from r1456886, labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceValueHolder.java)
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceHolder.java?p2=labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceHolder.java&p1=labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceValueHolder.java&r1=1456886&r2=1456947&rev=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceValueHolder.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/ReferenceHolder.java Fri Mar 15 13:23:14 2013
@@ -28,11 +28,13 @@ import java.lang.ref.SoftReference;
  * BTree), we will use a SoftReference to keep a reference to a Value, and if it's null,
  * then we will load the Value from the underlying physical support, using the offset. 
  * 
- * @param <V> The type for the stored value
+ * @param <E> The type for the stored element (either a value or a page)
+ * @param <K> The type of the BTree key
+ * @param <V> The type of the BTree value
  *
  * @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
  */
-public class ReferenceValueHolder<K, V> implements ValueHolder<K, V>
+public class ReferenceHolder<E, K, V> implements ElementHolder<E, K, V>
 {
     /** The BTree */
     private BTree<K, V> btree;
@@ -40,21 +42,21 @@ public class ReferenceValueHolder<K, V> 
     /** The offset for a value stored on disk */
     private long offset;
 
-    /** The reference to the Value instance, or null if it's not present */
-    private SoftReference<V> reference;
+    /** The reference to the element instance, or null if it's not present */
+    private SoftReference<E> reference;
 
 
     /**
-     * Create a new holder storing an offest and a SoftReference containing the value.
+     * Create a new holder storing an offset and a SoftReference containing the element.
      * 
      * @param offset The offset in disk for this value
-     * @param value The value to store into a SoftReference
+     * @param element The element to store into a SoftReference
      */
-    public ReferenceValueHolder( BTree<K, V> btree, V value, long offset )
+    public ReferenceHolder( BTree<K, V> btree, E element, long offset )
     {
         this.btree = btree;
         this.offset = offset;
-        this.reference = new SoftReference<V>( value );
+        this.reference = new SoftReference<E>( element );
     }
 
 
@@ -62,17 +64,17 @@ public class ReferenceValueHolder<K, V> 
      * {@inheritDoc}
      */
     @Override
-    public V getValue( BTree<K, V> btree )
+    public E getValue( BTree<K, V> btree )
     {
-        V value = reference.get();
+        E element = reference.get();
 
-        if ( value != null )
+        if ( element != null )
         {
-            return value;
+            return element;
         }
 
-        // We have to fetch the value from disk, using the offset now
-        return fetchValue( btree );
+        // We have to fetch the element from disk, using the offset now
+        return fetchElement( btree );
     }
 
 
@@ -80,7 +82,7 @@ public class ReferenceValueHolder<K, V> 
      * Retrieve the value from the disk, using the BTree and offset
      * @return
      */
-    private V fetchValue( BTree<K, V> btree )
+    private E fetchElement( BTree<K, V> btree )
     {
         return null;
     }
@@ -99,11 +101,11 @@ public class ReferenceValueHolder<K, V> 
     {
         StringBuilder sb = new StringBuilder();
 
-        V value = reference.get();
+        E element = reference.get();
 
-        if ( value != null )
+        if ( element != null )
         {
-            sb.append( value );
+            sb.append( element );
         }
         else
         {

Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/store/RecordManager.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/store/RecordManager.java?rev=1456947&r1=1456946&r2=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/store/RecordManager.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/store/RecordManager.java Fri Mar 15 13:23:14 2013
@@ -35,11 +35,11 @@ import java.util.Set;
 import org.apache.mavibot.btree.BTree;
 import org.apache.mavibot.btree.BTreeFactory;
 import org.apache.mavibot.btree.Leaf;
-import org.apache.mavibot.btree.MemoryValueHolder;
+import org.apache.mavibot.btree.MemoryHolder;
 import org.apache.mavibot.btree.Node;
 import org.apache.mavibot.btree.Page;
-import org.apache.mavibot.btree.ReferenceValueHolder;
-import org.apache.mavibot.btree.ValueHolder;
+import org.apache.mavibot.btree.ReferenceHolder;
+import org.apache.mavibot.btree.ElementHolder;
 import org.apache.mavibot.btree.exception.BTreeAlreadyManagedException;
 import org.apache.mavibot.btree.exception.EndOfFileExceededException;
 import org.apache.mavibot.btree.serializer.IntSerializer;
@@ -541,7 +541,7 @@ public class RecordManager
             {
                 Object value = btree.getValueSerializer().deserialize( byteBuffer );
 
-                ValueHolder valueHolder = new MemoryValueHolder( btree, value );
+                ElementHolder valueHolder = new MemoryHolder( btree, value );
                 BTreeFactory.setValue( ( ( Leaf ) page ), i, valueHolder );
 
                 Object key = btree.getKeySerializer().deserialize( byteBuffer );
@@ -986,7 +986,7 @@ public class RecordManager
                 }
                 else
                 {
-                    ValueHolder value = ( ( Leaf ) page ).getValue( pos );
+                    ElementHolder value = ( ( Leaf ) page ).getValue( pos );
                     buffer = btree.getValueSerializer().serialize( value.getValue( btree ) );
                     serializedData.add( buffer );
                     dataSize += buffer.length;
@@ -1469,7 +1469,7 @@ public class RecordManager
      * @return The offset of the new page
      * @throws IOException 
      */
-    public ValueHolder modifyPage( BTree btree, Page oldPage, long oldRevision, Page newPage, long newRevision )
+    public ElementHolder modifyPage( BTree btree, Page oldPage, long oldRevision, Page newPage, long newRevision )
         throws IOException
     {
         // We first need to save the new page on disk
@@ -1479,7 +1479,7 @@ public class RecordManager
         flushPages( pageIos );
 
         // Build the resulting reference
-        ValueHolder valueHolder = new ReferenceValueHolder( btree, newPage, pageIos[0].getOffset() );
+        ElementHolder valueHolder = new ReferenceHolder( btree, newPage, pageIos[0].getOffset() );
 
         return valueHolder;
     }

Modified: labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java?rev=1456947&r1=1456946&r2=1456947&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java (original)
+++ labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java Fri Mar 15 13:23:14 2013
@@ -1009,8 +1009,8 @@ public class InMemoryBTreeTest
         leaf.revision = revision;
         leaf.nbElems = tuples.length;
         leaf.keys = new Integer[leaf.nbElems];
-        leaf.values = ( MemoryValueHolder<Integer, String>[] ) Array
-            .newInstance( MemoryValueHolder.class, leaf.nbElems );
+        leaf.values = ( MemoryHolder<Integer, String>[] ) Array
+            .newInstance( MemoryHolder.class, leaf.nbElems );
 
         for ( Tuple<Integer, String> tuple : tuples )
         {



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