You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/12/01 12:21:30 UTC

svn commit: r1642666 - in /lucene/dev/branches/lucene_solr_4_10: ./ lucene/ lucene/CHANGES.txt lucene/core/ lucene/core/src/java/org/apache/lucene/store/RateLimiter.java lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java

Author: mikemccand
Date: Mon Dec  1 11:21:29 2014
New Revision: 1642666

URL: http://svn.apache.org/r1642666
Log:
LUCENE-6075: don't overflow int in SimpleRateLimiter

Modified:
    lucene/dev/branches/lucene_solr_4_10/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/lucene/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_10/lucene/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/store/RateLimiter.java
    lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java

Modified: lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt?rev=1642666&r1=1642665&r2=1642666&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/CHANGES.txt Mon Dec  1 11:21:29 2014
@@ -28,6 +28,9 @@ Bug fixes
 * LUCENE-6004: Don't highlight the LookupResult.key returned from
   AnalyzingInfixSuggester (Christian Reuschling, jane chang via Mike McCandless)
 
+* LUCENE-6075: Don't overflow int in SimpleRateLimiter (Boaz Leskes
+  via Mike McCandless)
+  
 * LUCENE-5980: Don't let document length overflow. (Robert Muir)
 
 * LUCENE-6042: CustomScoreQuery explain was incorrect in some cases,

Modified: lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/store/RateLimiter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/store/RateLimiter.java?rev=1642666&r1=1642665&r2=1642666&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/store/RateLimiter.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/core/src/java/org/apache/lucene/store/RateLimiter.java Mon Dec  1 11:21:29 2014
@@ -138,7 +138,17 @@ public abstract class RateLimiter {
             // NOTE: except maybe on real-time JVMs, minimum realistic sleep time
             // is 1 msec; if you pass just 1 nsec the default impl rounds
             // this up to 1 msec:
-            Thread.sleep((int) (pauseNS/1000000), (int) (pauseNS % 1000000));
+            int sleepNS;
+            int sleepMS;
+            if (pauseNS > 100000L * Integer.MAX_VALUE) {
+              // Not really practical (sleeping for 25 days) but we shouldn't overflow int:
+              sleepMS = Integer.MAX_VALUE;
+              sleepNS = 0;
+            } else {
+              sleepMS = (int) (pauseNS/1000000);
+              sleepNS = (int) (pauseNS % 1000000);
+            }
+            Thread.sleep(sleepMS, sleepNS);
           } catch (InterruptedException ie) {
             throw new ThreadInterruptedException(ie);
           }

Modified: lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java?rev=1642666&r1=1642665&r2=1642666&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java (original)
+++ lucene/dev/branches/lucene_solr_4_10/lucene/core/src/test/org/apache/lucene/store/TestRateLimiter.java Mon Dec  1 11:21:29 2014
@@ -42,6 +42,24 @@ public final class TestRateLimiter exten
     assertTrue("we should sleep at least 1 second but did only: " + convert + " millis", convert > 1000l); 
   }
 
+  // LUCENE-6075
+  public void testOverflowInt() throws Exception {
+    Thread t = new Thread() {
+        @Override
+        public void run() {
+          try {
+            new SimpleRateLimiter(1).pause((long) (1.5*Integer.MAX_VALUE*1024*1024/1000));
+            fail("should have been interrupted");
+          } catch (ThreadInterruptedException tie) {
+            // expected
+          }
+        }
+      };
+    t.start();
+    Thread.sleep(10);
+    t.interrupt();
+  }
+
   public void testThreads() throws Exception {
 
     double targetMBPerSec = 10.0 + 20 * random().nextDouble();