Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-4083

RateLimited.pause() throws unchecked exception

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Cannot Reproduce
    • 4.0-ALPHA
    • 4.0-ALPHA
    • core/store
    • 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.

      Attachments

        Activity

          People

            Unassigned Unassigned
            ab Andrzej Bialecki
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: