You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2009/05/12 17:46:41 UTC
svn commit: r773948 - in /directory/apacheds/trunk:
jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/
xdbm-base/src/main/java/org/apache/directory/server/xdbm/
Author: elecharny
Date: Tue May 12 15:46:41 2009
New Revision: 773948
URL: http://svn.apache.org/viewvc?rev=773948&view=rev
Log:
Fixed the way index are updated when removing some element. The cursor was not stopping once the element has been removed, leading to very slow removals.
Modified:
directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
directory/apacheds/trunk/xdbm-base/src/main/java/org/apache/directory/server/xdbm/Table.java
Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java?rev=773948&r1=773947&r2=773948&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmIndex.java Tue May 12 15:46:41 2009
@@ -482,6 +482,13 @@
while ( values.next() )
{
forward.remove( values.get().getValue(), id );
+
+ boolean removed = forward.remove( values.get().getValue(), id );
+
+ if ( !removed )
+ {
+ break;
+ }
}
reverse.remove( id );
Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java?rev=773948&r1=773947&r2=773948&view=diff
==============================================================================
--- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java (original)
+++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmTable.java Tue May 12 15:46:41 2009
@@ -631,11 +631,11 @@
* java.lang.Object)
*/
@SuppressWarnings("unchecked")
- public void remove( K key, V value ) throws IOException
+ public boolean remove( K key, V value ) throws IOException
{
if ( key == null )
{
- return;
+ return false;
}
if ( ! allowsDuplicates )
@@ -643,17 +643,18 @@
V oldValue = ( V ) bt.find( key );
// Remove the value only if it is the same as value.
- if ( oldValue != null && oldValue.equals( value ) )
+ if ( ( oldValue != null ) && oldValue.equals( value ) )
{
bt.remove( key );
count--;
- return;
+ return true;
}
- return;
+ return false;
}
DupsContainer<V> values = getDupsContainer( ( byte[] ) bt.find( key ) );
+
if ( values.isAvlTree() )
{
AvlTree<V> set = values.getAvlTree();
@@ -670,14 +671,15 @@
bt.insert( key, marshaller.serialize( set ), true );
}
count--;
- return;
+ return true ;
}
- return;
+ return false;
}
// if the number of duplicates falls below the numDupLimit value
BTree tree = getBTree( values.getBTreeRedirect() );
+
if ( removeDupFromBTree( tree, value ) )
{
/*
@@ -692,32 +694,34 @@
}
count--;
+ return true;
}
+ return false;
}
/**
* @see Table#remove(Object)
*/
- public void remove( K key ) throws IOException
+ public boolean remove( K key ) throws IOException
{
if ( key == null )
{
- return;
+ return false;
}
Object returned = bt.remove( key );
if ( null == returned )
{
- return;
+ return false;
}
if ( ! allowsDuplicates )
{
this.count--;
- return;
+ return true;
}
byte[] serialized = ( byte[] ) returned;
@@ -726,13 +730,13 @@
{
BTree tree = getBTree( BTreeRedirectMarshaller.INSTANCE.deserialize( serialized ) );
this.count -= tree.size();
- return;
+ return true;
}
else
{
AvlTree<V> set = marshaller.deserialize( serialized );
this.count -= set.getSize();
- return;
+ return true;
}
}
Modified: directory/apacheds/trunk/xdbm-base/src/main/java/org/apache/directory/server/xdbm/Table.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-base/src/main/java/org/apache/directory/server/xdbm/Table.java?rev=773948&r1=773947&r2=773948&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-base/src/main/java/org/apache/directory/server/xdbm/Table.java (original)
+++ directory/apacheds/trunk/xdbm-base/src/main/java/org/apache/directory/server/xdbm/Table.java Tue May 12 15:46:41 2009
@@ -227,7 +227,7 @@
* @throws Exception if there is a failure to read or write to
* the underlying Db
*/
- void remove( K key ) throws Exception;
+ boolean remove( K key ) throws Exception;
/**
@@ -239,7 +239,7 @@
* @throws Exception if there is a failure to read or write to
* the underlying Db
*/
- void remove( K key, V value ) throws Exception;
+ boolean remove( K key, V value ) throws Exception;
/**