Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Cannot Reproduce
-
4.0-ALPHA
-
None
-
New
Description
The while() loop in RateLimiter.pause() invokes Thread.sleep() with potentially large values, which occasionally results in InterruptedException being thrown from Thread.sleep(). This is wrapped in an unchecked ThreadInterruptedException and re-thrown, and results in high-level errors like this:
[junit] 2012-05-29 15:50:15,464 ERROR core.SolrCore - org.apache.lucene.util.ThreadInterruptedException: java.lang.InterruptedException: sleep interrupted [junit] at org.apache.lucene.store.RateLimiter.pause(RateLimiter.java:82) [junit] at org.apache.lucene.store.MockIndexOutputWrapper.writeBytes(MockIndexOutputWrapper.java:82) [junit] at org.apache.lucene.store.MockIndexOutputWrapper.writeByte(MockIndexOutputWrapper.java:73) [junit] at org.apache.lucene.store.DataOutput.writeVInt(DataOutput.java:191) [junit] at org.apache.lucene.codecs.lucene40.Lucene40PostingsWriter.addPosition(Lucene40PostingsWriter.java:237) [junit] at org.apache.lucene.index.FreqProxTermsWriterPerField.flush(FreqProxTermsWriterPerField.java:519) [junit] at org.apache.lucene.index.FreqProxTermsWriter.flush(FreqProxTermsWriter.java:92) [junit] at org.apache.lucene.index.TermsHash.flush(TermsHash.java:117) [junit] at org.apache.lucene.index.DocInverter.flush(DocInverter.java:53) [junit] at org.apache.lucene.index.DocFieldProcessor.flush(DocFieldProcessor.java:81) [junit] at org.apache.lucene.index.DocumentsWriterPerThread.flush(DocumentsWriterPerThread.java:475) [junit] at org.apache.lucene.index.DocumentsWriter.doFlush(DocumentsWriter.java:422) [junit] at org.apache.lucene.index.DocumentsWriter.flushAllThreads(DocumentsWriter.java:553) [junit] at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:2416) [junit] at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:2548) [junit] at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:2530) [junit] at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:414) [junit] at org.apache.solr.update.processor.RunUpdateProcessor.processCommit(RunUpdateProcessorFactory.java:82)
I believe this is a bug - the while() loop already ensures that the total time spent in pause() is correct even if InterruptedException-s are thrown, so they should not be re-thrown.
The patch is trivial - simply don't re-throw.