You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2008/03/13 21:49:47 UTC
svn commit: r636880 -
/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
Author: akarasulu
Date: Thu Mar 13 13:49:46 2008
New Revision: 636880
URL: http://svn.apache.org/viewvc?rev=636880&view=rev
Log:
fixed some bugs getting tests to pass
Modified:
directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
Modified: directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
URL: http://svn.apache.org/viewvc/directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java?rev=636880&r1=636879&r2=636880&view=diff
==============================================================================
--- directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java (original)
+++ directory/sandbox/akarasulu/bigbang/apacheds/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java Thu Mar 13 13:49:46 2008
@@ -28,6 +28,7 @@
import org.apache.directory.server.core.avltree.AvlTree;
import org.apache.directory.server.core.avltree.AvlTreeMarshaller;
import org.apache.directory.server.core.avltree.Marshaller;
+import org.apache.directory.server.core.avltree.LinkedAvlNode;
import org.apache.directory.server.core.cursor.Cursor;
import org.apache.directory.server.core.partition.impl.btree.*;
import org.apache.directory.server.schema.SerializableComparator;
@@ -471,19 +472,19 @@
if ( values.isAvlTree() )
{
- AvlTree set = values.getAvlTree();
- Object result;
+ AvlTree<V> set = values.getAvlTree();
+ LinkedAvlNode<V> result;
if ( isGreaterThan )
{
- result = set.findGreater( val );
+ result = set.findGreaterOrEqual( val );
}
else
{
- result = set.findLess( val );
+ result = set.findLessOrEqual( val );
}
- return ( result != null );
+ return result != null;
}
// last option is to try a btree with BTreeRedirects
@@ -660,7 +661,8 @@
{
BTree tree = convertToBTree( set );
BTreeRedirect redirect = new BTreeRedirect( tree.getRecid() );
- replaced = ( V ) bt.insert( key, redirect, true );
+ replaced = ( V ) bt.insert( key,
+ BTreeRedirectMarshaller.INSTANCE.serialize( redirect ), true );
}
else
{
@@ -760,7 +762,7 @@
public V remove( K key ) throws IOException
{
//noinspection unchecked
- V returned = ( V ) bt.remove( key );
+ Object returned = bt.remove( key );
if ( null == returned )
{
@@ -770,18 +772,27 @@
if ( ! allowsDuplicates )
{
this.count--;
- return returned;
+ //noinspection unchecked
+ return ( V ) returned;
+ }
+
+ if ( ! ( returned instanceof byte[] ) )
+ {
+ throw new IllegalStateException( "Expecting byte[] from returned element." );
}
- if ( returned instanceof byte[] )
+ byte[] serialized = ( byte[] ) returned;
+
+ if ( BTreeRedirectMarshaller.isNotRedirect( serialized ) )
{
//noinspection unchecked
- AvlTree<V> set = marshaller.deserialize( ( byte[] ) returned );
+ AvlTree<V> set = marshaller.deserialize( serialized );
this.count -= set.getSize();
return set.getFirst().getKey();
}
-
- BTree tree = getBTree( ( BTreeRedirect ) returned );
+
+ //noinspection ConstantConditions
+ BTree tree = getBTree( BTreeRedirectMarshaller.INSTANCE.deserialize( serialized ) );
this.count -= tree.size();
return removeAll( tree );
}
@@ -1026,7 +1037,7 @@
if ( valueSerializer != null )
{
- tree = BTree.createInstance( recMan, valueComparator, valueSerializer, valueSerializer );
+ tree = BTree.createInstance( recMan, valueComparator, valueSerializer, null );
}
else
{