janhoy commented on code in PR #1236: URL: https://github.com/apache/solr/pull/1236#discussion_r1047283207
########## solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java: ########## @@ -2203,15 +2203,19 @@ public DocListAndSet getDocListAndSet(Query query, Sort lsort, int offset, int l private DocList constantScoreDocList(int offset, int length, DocSet docs) { final int size = docs.size(); - if (length == 0 || size <= offset) { - return new DocSlice(0, 0, new int[0], null, size, 0f, TotalHits.Relation.EQUAL_TO); - } - final DocIterator iter = docs.iterator(); - for (int i = offset; i > 0; i--) { - iter.nextDoc(); // discard - } - final int returnSize = Math.min(length, size - offset); + + // NOTE: it would be possible to special-case `length == 0 || size <= offset` here + // (returning a DocList backed by an empty array) -- but the cases that would practically + // benefit from doing so would be extremely unusual, and likely pathological: + // 1. length==0 in conjunction with offset>0 (why?) + // 2. specifying offset>size (paging beyond end of results) + // This would require special consideration in dealing with cache handling (and generation + // of the final DocList via `DocSlice.subset(int, int)`), and it's just not worth it. + + final int returnSize = Math.min(offset + length, size); Review Comment: Makes sense, thanks for the explanation. I was just afraid of over-allocating and causing GC. I'll resolve this thread. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org