directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From elecha...@apache.org
Subject svn commit: r1509945 - /directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
Date Sat, 03 Aug 2013 09:01:08 GMT
Author: elecharny
Date: Sat Aug  3 09:01:08 2013
New Revision: 1509945

URL: http://svn.apache.org/r1509945
Log:
Limit the number of gathered candidates to 100 to avoid the construction of a huge set of
candidates (for instance if the filter is something like ObjectClass=person with 1 million
entries)

Modified:
    directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java

Modified: directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java?rev=1509945&r1=1509944&r2=1509945&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
(original)
+++ directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
Sat Aug  3 09:01:08 2013
@@ -304,21 +304,35 @@ public class DefaultOptimizer<E> impleme
         {
             Index<V, E, String> idx = ( Index<V, E, String> ) db.getIndex( node.getAttributeType()
);
 
-            //return idx.count( node.getValue().getValue() );
-
             Cursor<String> result = idx.forwardValueCursor( node.getValue().getValue()
);
             Set<String> values = new HashSet<String>();
+            int nbFound = 0;
 
             for ( String value : result )
             {
                 values.add( value );
+                nbFound++;
+
+                // Arbitrary stop gathering the candidates if we have more than 100
+                if ( nbFound == 100 )
+                {
+                    break;
+                }
             }
 
             result.close();
 
-            node.set( "candidates", values );
+            if ( nbFound < 100 )
+            {
+                // Store the found candidates in the node
+                node.set( "candidates", values );
 
-            return values.size();
+                return values.size();
+            }
+            else
+            {
+                return idx.count( node.getValue().getValue() );
+            }
         }
 
         // count for non-indexed attribute is unknown so we presume da worst



Mime
View raw message