[ https://issues.apache.org/jira/browse/SOLR-16587?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17646596#comment-17646596 ]
Andrei Minin commented on SOLR-16587: ------------------------------------- There is no need to create scripts - it is reproduceble in solr admin web. # My test index contains 103 documents. # Search using offset 100 and limit 100 (from doc 100 to 200, basically) URL: [http://localhost:8983/solr/#/SODemo/query?q=*:*&q.op=OR&indent=true&start=100&rows=100&useParams=] # 500 error thrown. solr.log stack trace: 1670933241713} hits=103 status=0 QTime=17 2022-12-13 12:07:40.038 INFO (qtp3540494-50) [] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/cores params={indexInfo=false&wt=json&_=1670933 236982} status=0 QTime=0 2022-12-13 12:07:40.038 INFO (qtp3540494-53) [ x:SODemo] o.a.s.c.S.Request webapp=/solr path=/config/params params=\{wt=json&_=1670933241713} status= 0 QTime=0 2022-12-13 12:07:40.041 INFO (qtp3540494-28) [] o.a.s.s.HttpSolrCall [admin] webapp=null path=/admin/info/system params=\{wt=json&_=1670933236982} st atus=0 QTime=3 2022-12-13 12:07:40.043 INFO (qtp3540494-25) [ x:SODemo] o.a.s.c.S.Request webapp=/solr path=/select params={q=*:*&indent=true&start=100&q.op=OR&row s=100&useParams=&_=1670933241713} hits=0 status=0 QTime=4 2022-12-13 12:07:40.044 ERROR (qtp3540494-25) [ x:SODemo] o.a.s.s.HttpSolrCall java.lang.NullPointerException => java.lang.NullPointerException at org.apache.solr.response.DocsStreamer.<init>(DocsStreamer.java:74) java.lang.NullPointerException: null at org.apache.solr.response.DocsStreamer.<init>(DocsStreamer.java:74) ~[?:?] at org.apache.solr.response.ResultContext.getProcessedDocuments(ResultContext.java:55) ~[?:?] at org.apache.solr.response.TextResponseWriter.writeDocuments(TextResponseWriter.java:239) ~[?:?] at org.apache.solr.response.TextResponseWriter.writeVal(TextResponseWriter.java:189) ~[?:?] at org.apache.solr.common.util.TextWriter.writeVal(TextWriter.java:47) ~[?:?] at org.apache.solr.common.util.JsonTextWriter.writeNamedListAsMapWithDups(JsonTextWriter.java:388) ~[?:?] at org.apache.solr.common.util.JsonTextWriter.writeNamedList(JsonTextWriter.java:296) ~[?:?] at org.apache.solr.response.JSONWriter.writeResponse(JSONWriter.java:77) ~[?:?] at org.apache.solr.response.JSONResponseWriter.write(JSONResponseWriter.java:63) ~[?:?] at org.apache.solr.response.QueryResponseWriterUtil.writeQueryResponse(QueryResponseWriterUtil.java:71) ~[?:?] at org.apache.solr.servlet.HttpSolrCall.writeResponse(HttpSolrCall.java:999) ~[?:?] at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:631) ~[?:?] at org.apache.solr.servlet.SolrDispatchFilter.dispatch(SolrDispatchFilter.java:250) ~[?:?] at org.apache.solr.servlet.SolrDispatchFilter.lambda$doFilter$0(SolrDispatchFilter.java:218) ~[?:?] at org.apache.solr.servlet.ServletUtils.traceHttpRequestExecution2(ServletUtils.java:257) ~[?:?] at org.apache.solr.servlet.ServletUtils.rateLimitRequest(ServletUtils.java:227) ~[?:?] at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:213) ~[?:?] at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:195) ~[?:?] at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) ~[jetty-security-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) ~[jetty-servlet-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191) ~[jetty-server-9.4.48.v20220622.jar:9. 4.48.v20220622] at org.eclipse.jetty.server.handler.InetAccessHandler.handle(InetAccessHandler.java:177) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622 ] at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) ~[jetty-server-9.4.48.v20220622.jar:9.4.48.v20220622 ] > Solr 9.1.0 last page retrieval error > ------------------------------------ > > Key: SOLR-16587 > URL: https://issues.apache.org/jira/browse/SOLR-16587 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Components: search > Environment: Solr 9.1.0 > Search with wildcard query **:* (all match) and reading pages without cursor > until last page* > Reporter: Andrei Minin > Priority: Major > Attachments: Screenshot from 2022-12-13 15-09-00.png, Screenshot from > 2022-12-13 15-10-11.png > > > When searching with offset, last page fails by internal assert. > For example there are 210 documents in index matching criteria and I am > reading documents using page size =100; 3rd page with range 200 to 300 fails. > Same unit test runs OK on Solr 8.11 and 9.0.0 > Debugging details: > class org.apache.solr.search.SolrIndexSearcher method > {color:#cc7832}private void > {color}{color:#ffc66d}getDocListC{color}(QueryResult qr{color:#cc7832}, > {color}QueryCommand cmd) > receives command > cmd = \{QueryCommand@12109} > query = \{MatchAllDocsQuery@12121} "*:*" > queryID = null > isQueryCancellable = false > filterList = null > filter = null > sort = null > offset = 200 > len = 200 > supersetMaxDoc = 220 > flags = 0 > timeAllowed = -1 > minExactCount = 2147483647 > cursorMark = null > On line 1650: > out.docList = constantScoreDocList(cmd.getOffset(), cmd.getLen(), out.docSet); > docList created with 10 documents (correct): > out.docList = \{DocSlice@12126} > offset = 0 > len = 10 > docs = \{int[10]@12129} [200, 201, 202, 203, 204, 205, 206, 207, 208, 209] > scores = null > matches = 210 > matchesRelation = \{TotalHits$Relation@12078} "EQUAL_TO" > maxScore = 0.0 > ramBytesUsed = 112 > But on line 1687 it is converted to null because cmd offset (200) and lenght > (200) applied to this 10 documents list (thru reassigning superset): > / Kludge... > // we can't use DocSlice.subset, even though it should be an identity op > // because it gets confused by situations where there are lots of > matches, but > // less docs in the slice then were requested, (due to the cursor) > // so we have to short circuit the call. > // None of which is really a problem since we can't use caching with > // cursors anyway, but it still looks weird to have to special case this > // behavior based on this condition - hence the long explanation. > superset = out.docList; > out.docList = superset.subset(cmd.getOffset(), cmd.getLen()); > As result, null docList returned from method (instead of 10 documents list) > and failed later in class org.apache.solr.response.BasicResultContext on > assert on line 39: > {color:#cc7832}assert {color}docList != {color:#cc7832}null;{color} > In my opition, there is an error on line 1688 in class SolrIndexSearcher: > out.docList = superset.subset(cmd.getOffset(), cmd.getLen()); > this line shouldn't be called or called with different parameters. > Honestly I don't understand logic of this line, what is the reason for > recursive subset call? > 2 lines can be presented as: > out.docList = out.docList.subset(cmd.getOffset(), cmd.getLen()); -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org For additional commands, e-mail: issues-h...@solr.apache.org