[ https://issues.apache.org/jira/browse/SOLR-7606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14564524#comment-14564524 ]
Uwe Schindler commented on SOLR-7606: ------------------------------------- One other solution for the query time checks maybe: We could try/catch the whole parent/child logic with some try/catch block and if stuff like AIOOBE happens, it rethrows a useful message. We could then remove all checks we currently have (all those IllegalStateEx). This would be much cheaper that the tons of checks we have now. But I agree, we should fix indexing or at least provide a block join indexing api that allows to index and delete blocks with some definition which fields to use for parent and child documents. > ToParentBlockJoinQuery fails with AIOOBE under certain circumstances > -------------------------------------------------------------------- > > Key: SOLR-7606 > URL: https://issues.apache.org/jira/browse/SOLR-7606 > Project: Solr > Issue Type: Bug > Affects Versions: 4.10.4 > Reporter: Uwe Schindler > Assignee: Uwe Schindler > Attachments: LUCENE-6512.patch > > > I had a customer using BlockJoin with Solr. He executed a block join query > and the following appeared in Solr's logs: > {noformat} > 28 May 2015 17:19:20 ERROR (SolrException.java:131) - > java.lang.ArrayIndexOutOfBoundsException: -1 > at org.apache.lucene.codecs.lucene40.BitVector.get(BitVector.java:149) > at > org.apache.lucene.search.join.ToParentBlockJoinQuery$BlockJoinScorer.nextDoc(ToParentBlockJoinQuery.java:293) > at > org.apache.lucene.search.Weight$DefaultBulkScorer.scoreAll(Weight.java:192) > at > org.apache.lucene.search.Weight$DefaultBulkScorer.score(Weight.java:163) > at org.apache.lucene.search.BulkScorer.score(BulkScorer.java:35) > at > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:621) > at > org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:297) > at > org.apache.solr.search.SolrIndexSearcher.buildAndRunCollectorChain(SolrIndexSearcher.java:209) > at > org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:1619) > at > org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1433) > at > org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:514) > at > org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:484) > at > org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:218) > at > org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) > at org.apache.solr.core.SolrCore.execute(SolrCore.java:1976) > at > org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:777) > at > org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:418) > at > org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) > at java.lang.Thread.run(Thread.java:745) > {noformat} > I debugged this stuff and found out when this happens: > The last block of documents was not followed by a parent. If one of the child > documents without a parent at the end of the index match the inner query, > scorer calls nextSetBit() to find next parent document. This returns -1. > There is an assert afterwards that checks for -1, but in production code, > this is of course never executed. > If the index has deletetions the false -1 is passed to acceptDocs and then > triggers the above problem. > We should change the assert to another IllegalStateException() which is used > to notify the user if the orthogonality is broken. By that the user gets the > information that his index is broken and contains child documents without a > parent at the very end of a segment. > I have seen this on 4.10.4. Maybe thats already fixed in 5.0, but I just open > this here for investigation. This was clearly a problem in the index, but due > to Solr's buggy implementation of parent/child documents (you have to set the > parent flag in contrast to Elasticsearch on your own - which is stupid!!!) > this was not detected at indexing time. We should open an issue in Solr to > fix this bad behaviour and make solr automatically add the parent field (it > only adds a "_root_" field automatically, maybe it should also add a > "_parent_" field automatically). -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org