You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/03/21 19:55:12 UTC
svn commit: r1580021 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/test-framework/
lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java
Author: rmuir
Date: Fri Mar 21 18:55:12 2014
New Revision: 1580021
URL: http://svn.apache.org/r1580021
Log:
add startingGun to BaseTokenStreamTestCase to release all threads at once
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/test-framework/ (props changed)
lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java
Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java?rev=1580021&r1=1580020&r2=1580021&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/analysis/BaseTokenStreamTestCase.java Fri Mar 21 18:55:12 2014
@@ -26,6 +26,7 @@ import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.*;
+import java.util.concurrent.CountDownLatch;
import org.apache.lucene.analysis.tokenattributes.*;
import org.apache.lucene.document.Document;
@@ -450,13 +451,14 @@ public abstract class BaseTokenStreamTes
final boolean simple;
final boolean offsetsAreCorrect;
final RandomIndexWriter iw;
+ final CountDownLatch latch;
// NOTE: not volatile because we don't want the tests to
// add memory barriers (ie alter how threads
// interact)... so this is just "best effort":
public boolean failed;
- AnalysisThread(long seed, Analyzer a, int iterations, int maxWordLength, boolean useCharFilter, boolean simple, boolean offsetsAreCorrect, RandomIndexWriter iw) {
+ AnalysisThread(long seed, CountDownLatch latch, Analyzer a, int iterations, int maxWordLength, boolean useCharFilter, boolean simple, boolean offsetsAreCorrect, RandomIndexWriter iw) {
this.seed = seed;
this.a = a;
this.iterations = iterations;
@@ -465,17 +467,19 @@ public abstract class BaseTokenStreamTes
this.simple = simple;
this.offsetsAreCorrect = offsetsAreCorrect;
this.iw = iw;
+ this.latch = latch;
}
@Override
public void run() {
boolean success = false;
try {
+ latch.await();
// see the part in checkRandomData where it replays the same text again
// to verify reproducability/reuse: hopefully this would catch thread hazards.
checkRandomData(new Random(seed), a, iterations, maxWordLength, useCharFilter, simple, offsetsAreCorrect, iw);
success = true;
- } catch (IOException e) {
+ } catch (Exception e) {
Rethrow.rethrow(e);
} finally {
failed = !success;
@@ -507,13 +511,15 @@ public abstract class BaseTokenStreamTes
// now test with multiple threads: note we do the EXACT same thing we did before in each thread,
// so this should only really fail from another thread if its an actual thread problem
int numThreads = TestUtil.nextInt(random, 2, 4);
+ final CountDownLatch startingGun = new CountDownLatch(1);
AnalysisThread threads[] = new AnalysisThread[numThreads];
for (int i = 0; i < threads.length; i++) {
- threads[i] = new AnalysisThread(seed, a, iterations, maxWordLength, useCharFilter, simple, offsetsAreCorrect, iw);
+ threads[i] = new AnalysisThread(seed, startingGun, a, iterations, maxWordLength, useCharFilter, simple, offsetsAreCorrect, iw);
}
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
+ startingGun.countDown();
for (int i = 0; i < threads.length; i++) {
try {
threads[i].join();