[
https://issues.apache.org/jira/browse/SOLR-16587?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17646596#comment-17646596
]
Andrei Minin edited comment on SOLR-16587 at 12/13/22 12:15 PM:
----------------------------------------------------------------
There is no need to create scripts - it is reproduceble in solr admin web.
Screenshots attached
# 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
]
was (Author: [email protected]):
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: [email protected]
For additional commands, e-mail: [email protected]