tokee / lucene-solr

High cardinality faceting (SOLR-5894)
http://tokee.github.io/lucene-solr/
7 stars 1 forks source link

ArrayIndexOutOfBounds with 4.10 sparse #40

Closed tokee closed 9 years ago

tokee commented 9 years ago

When issuing a (possibly heuristic) call with a high number of hits (~20% of total documents) on the field

INFO  - 2015-06-13 00:20:34.020; org.apache.solr.request.sparse.SparseDocValuesFacets;
 Calculated maxCountForAny=4971418 for field links with 5884590591 references to 615753858
 unique values in 110478ms.
Histogram: 0, 417838182, 105174586, 43851422, 22966374, 12128650, 6387051, 3260480,
 1889402, 1012326, 596969, 331251, 175170, 81764, 39667, 13677, 4263, 1596, 679, 285,
 53, 5, 4, 2, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0

the exception below was thrown.

ERROR - 2015-06-13 16:46:20.099; org.apache.solr.common.SolrException; null:org.apache.solr.common.SolrException: Exception during facet.field: links
        at org.apache.solr.request.SimpleFacets$2.call(SimpleFacets.java:654)
        at org.apache.solr.request.SimpleFacets$2.call(SimpleFacets.java:638)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at org.apache.solr.request.SimpleFacets$1.execute(SimpleFacets.java:592)
        at org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:664)
        at org.apache.solr.request.SimpleFacets.getFacetCounts(SimpleFacets.java:268)
        at org.apache.solr.handler.component.FacetComponent.process(FacetComponent.java:111)
        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:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.IOException: Exception calling Accumulator within currentThread
        at org.apache.solr.request.sparse.SparseDocValuesFacets.collectCounts(SparseDocValuesFacets.java:412)
        at org.apache.solr.request.sparse.SparseDocValuesFacets.getCounts(SparseDocValuesFacets.java:182)
        at org.apache.solr.request.SimpleFacets.getTermCounts(SimpleFacets.java:486)
        at org.apache.solr.request.SimpleFacets.access$000(SimpleFacets.java:114)
        at org.apache.solr.request.SimpleFacets$2.call(SimpleFacets.java:643)
        ... 26 more
Caused by: java.lang.IndexOutOfBoundsException: index 562400
        at java.util.concurrent.atomic.AtomicLongArray.checkedByteOffset(AtomicLongArray.java:64)
        at java.util.concurrent.atomic.AtomicLongArray.get(AtomicLongArray.java:111)
        at org.apache.lucene.util.packed.PackedOpportunistic$PackedOpportunistic16.incrementStatus(PackedOpportunistic.java:1037)
        at org.apache.lucene.util.packed.NPlaneMutable$SplitRankZeroPlane.inc(NPlaneMutable.java:916)
        at org.apache.lucene.util.packed.NPlaneMutable.increment(NPlaneMutable.java:381)
        at org.apache.solr.request.sparse.SparseCounterBitmap.inc(SparseCounterBitmap.java:134)
        at org.apache.solr.request.sparse.SparseDocValuesFacets.accumMulti(SparseDocValuesFacets.java:860)
        at org.apache.solr.request.sparse.SparseDocValuesFacets.access$100(SparseDocValuesFacets.java:84)
        at org.apache.solr.request.sparse.SparseDocValuesFacets$Accumulator.call(SparseDocValuesFacets.java:522)
        at org.apache.solr.request.sparse.SparseDocValuesFacets.collectCounts(SparseDocValuesFacets.java:408)
        ... 30 more
tokee commented 9 years ago

As the problem does not appear with the packed counter, this seems to be an issue of the nplanez counter not being cleared properly with high result set cardinality.

tokee commented 9 years ago

It seems that this issue was triggered by two separate bugs. There are still cases of overflow errors in an integration test, but it seems that the bug is in the extraction of top-X results, not in counter incrementation:

ERROR - 2015-06-18 14:35:47.872; org.apache.solr.common.SolrException; org.apache.solr.common.SolrException: Exception during facet.field: url
        at org.apache.solr.request.SimpleFacets$2.call(SimpleFacets.java:654)
        at org.apache.solr.request.SimpleFacets$2.call(SimpleFacets.java:638)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at org.apache.solr.request.SimpleFacets$1.execute(SimpleFacets.java:592)
        at org.apache.solr.request.SimpleFacets.getFacetFieldCounts(SimpleFacets.java:664)
        at org.apache.solr.request.SimpleFacets.getFacetCounts(SimpleFacets.java:268)
        at org.apache.solr.handler.component.FacetComponent.process(FacetComponent.java:111)
        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:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.IndexOutOfBoundsException: index 3192945
        at java.util.concurrent.atomic.AtomicLongArray.checkedByteOffset(AtomicLongArray.java:64)
        at java.util.concurrent.atomic.AtomicLongArray.get(AtomicLongArray.java:111)
        at org.apache.lucene.util.packed.PackedOpportunistic.getBlock(PackedOpportunistic.java:87)
        at org.apache.lucene.util.packed.NPlaneMutable$SplitRankZeroPlane.getNonZeroBits(NPlaneMutable.java:940)
        at org.apache.lucene.util.packed.NPlaneMutable.getNonZeroBits(NPlaneMutable.java:143)
        at org.apache.solr.request.sparse.SparseCounterBitmap.iterate(SparseCounterBitmap.java:370)
        at org.apache.solr.request.sparse.SparseDocValuesFacets.getCounts(SparseDocValuesFacets.java:232)
        at org.apache.solr.request.SimpleFacets.getTermCounts(SimpleFacets.java:486)
        at org.apache.solr.request.SimpleFacets.access$000(SimpleFacets.java:114)
        at org.apache.solr.request.SimpleFacets$2.call(SimpleFacets.java:643)
        ... 26 more