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();
+ }
}