Which version of Java are you using?

That root cause exception is somewhat spooky: it's in the
ByteBufferIndexCode that handles an "UnderflowException", ie when a
small (maybe a few hundred bytes) read happens to span the 1 GB page
boundary, and specifically the exception happens on the final read
(curBuf.get(b, offset, len)).  Such page-spanning reads are very rare.

The code looks fine to me though, and it's hard to explain how NPE (b
= null) could happen: that byte array is allocated in the
Lucene41PostingsReader.BlockDocsAndPositionsEnum class's ctor: encoded
= new byte[MAX_ENCODED_SIZE].

Separately, you really should not have to optimize daily, if ever.

Mike McCandless

http://blog.mikemccandless.com


On Mon, Jan 13, 2014 at 2:06 AM, Ralf Matulat <ralf.matu...@bundestag.de> wrote:
> Hi,
> I am currently running into merge-issues while optimizing an index.
>
> To give you some informations:
>
> We are running 4 SOLR Servers with identical OS, VM-Hardware, RAM etc.
> Only one Server by now is having issues, the others are fine.
>
> We are running SOLR 4.4.0 with Tomcat 6.0
> It was running since October without any problems.
> The problems first occur after doing a minor change in the synonyms.txt, but
> I guess that was just a coincedence.
>
> We added `ulimit -v unlimited` to our tomcat init-script years ago.
>
> We have 4 Cores running on each SOLR Server, configuration, index-sizes of
> all 4 servers are identical (we are distributing cfgs via git).
>
> We did a rebuild of the index twice: First time without removing the old
> index files, second time deleting the data dir and starting from scratch.
>
> We are working with DIH, getting data from a MySQL DB.
> After an initial complete index-run, the optimize is working. The optimize
> fails one or two days later.
>
> We are doing one optimize-run a day, the index contains ~10 millions
> documents, the index size on disc is ~39GB while having 127G of free disc
> space.
>
> We have a mergeFactor of 3.
>
> The solr.log says:
>
> ERROR - 2014-01-12 22:47:11.062; org.apache.solr.common.SolrException;
> java.io.IOException: background merge hit exception: _dc8(4.4):C9876366/1327
> _e8u(4.4):C4250/7 _f4a(4.4):C1553/13 _fj6(4.4
> ):C1903/15 _ep3(4.4):C1217/42 _fle(4.4):C256/7 _flf(4.4):C11 into _flg
> [maxNumSegments=1]
>         at
> org.apache.lucene.index.IndexWriter.forceMerge(IndexWriter.java:1714)
>         at
> org.apache.lucene.index.IndexWriter.forceMerge(IndexWriter.java:1650)
>         at
> org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:530)
>         at
> org.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:95)
>         at
> org.apache.solr.update.processor.UpdateRequestProcessor.processCommit(UpdateRequestProcessor.java:64)
>         at
> org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalCommit(DistributedUpdateProcessor.java:1235)
>         at
> org.apache.solr.update.processor.DistributedUpdateProcessor.processCommit(DistributedUpdateProcessor.java:1219)
>         at
> org.apache.solr.update.processor.LogUpdateProcessor.processCommit(LogUpdateProcessorFactory.java:157)
>         at
> org.apache.solr.handler.RequestHandlerUtils.handleCommit(RequestHandlerUtils.java:69)
>         at
> org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:68)
>         at
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
>         at org.apache.solr.core.SolrCore.execute(SolrCore.java:1904)
>         at
> org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:659)
>         at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:362)
>         at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
>         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:857)
>         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:735)
> Caused by: java.lang.NullPointerException
>         at java.nio.ByteBuffer.get(ByteBuffer.java:661)
>         at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:245)
>         at
> org.apache.lucene.store.ByteBufferIndexInput.readBytes(ByteBufferIndexInput.java:107)
>         at
> org.apache.lucene.codecs.lucene41.ForUtil.readBlock(ForUtil.java:197)
>         at
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader$BlockDocsAndPositionsEnum.refillDocs(Lucene41PostingsReader.java:748)
>         at
> org.apache.lucene.codecs.lucene41.Lucene41PostingsReader$BlockDocsAndPositionsEnum.nextDoc(Lucene41PostingsReader.java:813)
>         at
> org.apache.lucene.codecs.MappingMultiDocsAndPositionsEnum.nextDoc(MappingMultiDocsAndPositionsEnum.java:104)
>         at
> org.apache.lucene.codecs.PostingsConsumer.merge(PostingsConsumer.java:101)
>         at
> org.apache.lucene.codecs.TermsConsumer.merge(TermsConsumer.java:164)
>         at
> org.apache.lucene.codecs.FieldsConsumer.merge(FieldsConsumer.java:72)
>         at
> org.apache.lucene.index.SegmentMerger.mergeTerms(SegmentMerger.java:365)
>         at
> org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:98)
>         at
> org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:3772)
>         at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3376)
>         at
> org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:405)
>         at
> org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:482)
>
> I am currently running a checkIndex on that core/index - but that will run
> for hours, but I just want to kick that thread off to get any suggestions
> from you guys.
>
> Any suggestions?
> Thank you and best regards
> Ralf

Reply via email to