You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2007/11/19 17:38:51 UTC
svn commit: r596359 - in /lucene/solr/trunk: CHANGES.txt
src/java/org/apache/solr/search/SolrIndexSearcher.java
src/test/org/apache/solr/BasicFunctionalityTest.java
Author: yonik
Date: Mon Nov 19 08:38:50 2007
New Revision: 596359
URL: http://svn.apache.org/viewvc?rev=596359&view=rev
Log:
SOLR-413: cap lastDocRequested at maxDoc()
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java
lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java
Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=596359&r1=596358&r2=596359&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Mon Nov 19 08:38:50 2007
@@ -211,6 +211,9 @@
12. SOLR-393: Removed duplicate contentType from raw-schema.jsp. (bill)
+13. SOLR-413: Requesting a large numbers of documents to be returned (limit)
+ can result in an out-of-memory exception, even for a small index. (yonik)
+
Other Changes
1. SOLR-135: Moved common classes to org.apache.solr.common and altered the
build scripts to make two jars: apache-solr-1.3.jar and
Modified: lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=596359&r1=596358&r2=596359&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/search/SolrIndexSearcher.java Mon Nov 19 08:38:50 2007
@@ -37,7 +37,6 @@
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.solr.core.SolrInfoMBean.Category;
/**
@@ -707,8 +706,10 @@
*/
private void getDocListC(DocListAndSet out, Query query, List<Query> filterList, DocSet filter, Sort lsort, int offset, int len, int flags) throws IOException {
QueryResultKey key=null;
- int maxDoc = offset + len;
- int supersetMaxDoc=maxDoc;
+ int maxDocRequested = offset + len;
+ // check for overflow, and check for # docs in index
+ if (maxDocRequested < 0 || maxDocRequested > maxDoc()) maxDocRequested = maxDoc();
+ int supersetMaxDoc= maxDocRequested;
DocList superset;
@@ -752,10 +753,11 @@
// next resultWindowSize for better caching.
// handle 0 special case as well as avoid idiv in the common case.
- if (maxDoc < queryResultWindowSize) {
+ if (maxDocRequested < queryResultWindowSize) {
supersetMaxDoc=queryResultWindowSize;
} else {
- supersetMaxDoc = ((maxDoc-1)/queryResultWindowSize + 1)*queryResultWindowSize;
+ supersetMaxDoc = ((maxDocRequested -1)/queryResultWindowSize + 1)*queryResultWindowSize;
+ if (supersetMaxDoc < 0) supersetMaxDoc=maxDocRequested;
}
}
@@ -819,7 +821,9 @@
private DocList getDocListNC(Query query, DocSet filter, Sort lsort, int offset, int len, int flags) throws IOException {
- final int lastDocRequested = offset+len;
+ int last = offset+len;
+ if (last < 0 || last > maxDoc()) last=maxDoc();
+ final int lastDocRequested = last;
int nDocsReturned;
int totalHits;
float maxScore;
@@ -977,7 +981,9 @@
// the DocSet returned is for the query only, without any filtering... that way it may
// be cached if desired.
private DocSet getDocListAndSetNC(DocListAndSet out, Query query, DocSet filter, Sort lsort, int offset, int len, int flags) throws IOException {
- final int lastDocRequested = offset+len;
+ int last = offset+len;
+ if (last < 0 || last > maxDoc()) last=maxDoc();
+ final int lastDocRequested = last;
int nDocsReturned;
int totalHits;
float maxScore;
Modified: lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=596359&r1=596358&r2=596359&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/BasicFunctionalityTest.java Mon Nov 19 08:38:50 2007
@@ -145,6 +145,17 @@
assertU(a, a);
}
assertU(commit());
+
+ // test maxint
+ assertQ(req("q","id:[100 TO 110]", "rows","2147483647")
+ ,"//*[@numFound='4']"
+ );
+
+ // test big limit
+ assertQ(req("q","id:[100 TO 111]", "rows","1147483647")
+ ,"//*[@numFound='4']"
+ );
+
assertQ(req("id:[100 TO 110]")
,"//*[@numFound='4']"
);