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 2011/01/07 19:08:30 UTC

svn commit: r1056430 - in /lucene/dev/branches/branch_3x: ./ lucene/ lucene/contrib/icu/src/tools/java/org/apache/lucene/analysis/icu/ lucene/src/java/org/apache/lucene/analysis/standard/ lucene/src/java/org/apache/lucene/store/ lucene/src/test/org/apa...

Author: mikemccand
Date: Fri Jan  7 18:08:29 2011
New Revision: 1056430

URL: http://svn.apache.org/viewvc?rev=1056430&view=rev
Log:
LUCENE-2852: fix false EOF corner case in RAMInputStream

Modified:
    lucene/dev/branches/branch_3x/   (props changed)
    lucene/dev/branches/branch_3x/lucene/   (props changed)
    lucene/dev/branches/branch_3x/lucene/contrib/icu/src/tools/java/org/apache/lucene/analysis/icu/   (props changed)
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/analysis/standard/   (props changed)
    lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/store/RAMInputStream.java
    lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/analysis/   (props changed)
    lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestThreadSafe.java
    lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestRAMDirectory.java
    lucene/dev/branches/branch_3x/solr/   (props changed)

Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/store/RAMInputStream.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/store/RAMInputStream.java?rev=1056430&r1=1056429&r2=1056430&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/store/RAMInputStream.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/store/RAMInputStream.java Fri Jan  7 18:08:29 2011
@@ -83,6 +83,7 @@ class RAMInputStream extends IndexInput 
   }
 
   private final void switchCurrentBuffer(boolean enforceEOF) throws IOException {
+    bufferStart = (long) BUFFER_SIZE * (long) currentBufferIndex;
     if (currentBufferIndex >= file.numBuffers()) {
       // end of file reached, no more buffers left
       if (enforceEOF)
@@ -95,7 +96,6 @@ class RAMInputStream extends IndexInput 
     } else {
       currentBuffer = file.getBuffer(currentBufferIndex);
       bufferPosition = 0;
-      bufferStart = (long) BUFFER_SIZE * (long) currentBufferIndex;
       long buflen = length - bufferStart;
       bufferLength = buflen > BUFFER_SIZE ? BUFFER_SIZE : (int) buflen;
     }

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestThreadSafe.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestThreadSafe.java?rev=1056430&r1=1056429&r2=1056430&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestThreadSafe.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestThreadSafe.java Fri Jan  7 18:08:29 2011
@@ -27,6 +27,7 @@ import org.apache.lucene.document.*;
 
 import java.util.Random;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.io.IOException;
 
 public class TestThreadSafe extends LuceneTestCase {
@@ -34,16 +35,16 @@ public class TestThreadSafe extends Luce
 
   IndexReader ir1;
 
-  String failure=null;
-
-
   class Thr extends Thread {
     final int iter;
     final Random rand;
+    final AtomicBoolean failed;
+
     // pass in random in case we want to make things reproducable
-    public Thr(int iter, Random rand) {
+    public Thr(int iter, Random rand, AtomicBoolean failed) {
       this.iter = iter;
       this.rand = rand;
+      this.failed = failed;
     }
 
     @Override
@@ -61,8 +62,8 @@ public class TestThreadSafe extends Luce
 
         }
       } catch (Throwable th) {
-        failure=th.toString();
-        fail(failure);
+        failed.set(true);
+        throw new RuntimeException(th);
       }
     }
 
@@ -124,16 +125,15 @@ public class TestThreadSafe extends Luce
 
   void doTest(int iter, int nThreads) throws Exception {
     Thr[] tarr = new Thr[nThreads];
+    AtomicBoolean failed = new AtomicBoolean();
     for (int i=0; i<nThreads; i++) {
-      tarr[i] = new Thr(iter, new Random(random.nextLong()));
+      tarr[i] = new Thr(iter, new Random(random.nextLong()), failed);
       tarr[i].start();
     }
     for (int i=0; i<nThreads; i++) {
       tarr[i].join();
     }
-    if (failure!=null) {
-      fail(failure);
-    }
+    assertFalse(failed.get());
   }
 
   public void testLazyLoadThreadSafety() throws Exception{

Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestRAMDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestRAMDirectory.java?rev=1056430&r1=1056429&r2=1056430&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestRAMDirectory.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/store/TestRAMDirectory.java Fri Jan  7 18:08:29 2011
@@ -180,4 +180,22 @@ public class TestRAMDirectory extends Lu
     }
     dir.delete();
   }
+
+  // LUCENE-2852
+  public void testSeekToEOFThenBack() throws Exception {
+    RAMDirectory dir = new RAMDirectory();
+
+    IndexOutput o = dir.createOutput("out");
+    byte[] bytes = new byte[3*RAMInputStream.BUFFER_SIZE];
+    o.writeBytes(bytes, 0, bytes.length);
+    o.close();
+
+    IndexInput i = dir.openInput("out");
+    i.seek(2*RAMInputStream.BUFFER_SIZE-1);
+    i.seek(3*RAMInputStream.BUFFER_SIZE);
+    i.seek(RAMInputStream.BUFFER_SIZE);
+    i.readBytes(bytes, 0, 2*RAMInputStream.BUFFER_SIZE);
+    i.close();
+    dir.close();
+  }
 }