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