make a separate explicit test case for testing threads

This commit is contained in:
Mike McCandless 2016-03-19 09:04:04 -04:00
parent 70290e8947
commit 3d6b5d12a2
1 changed files with 33 additions and 20 deletions

View File

@ -47,7 +47,6 @@ import org.apache.lucene.store.Directory;
import org.apache.lucene.util.FixedBitSet; import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.IOUtils; import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.SloppyMath;
import org.apache.lucene.util.TestUtil; import org.apache.lucene.util.TestUtil;
import org.junit.BeforeClass; import org.junit.BeforeClass;
@ -57,9 +56,6 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
protected static final String FIELD_NAME = "point"; protected static final String FIELD_NAME = "point";
private static final double LON_SCALE = (0x1L<< GeoEncodingUtils.BITS)/360.0D;
private static final double LAT_SCALE = (0x1L<< GeoEncodingUtils.BITS)/180.0D;
private static double originLat; private static double originLat;
private static double originLon; private static double originLon;
private static double lonRange; private static double lonRange;
@ -99,7 +95,7 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
double[] lons = new double[numPoints]; double[] lons = new double[numPoints];
Arrays.fill(lons, theLon); Arrays.fill(lons, theLon);
verify(small, lats, lons); verify(small, lats, lons, false);
} }
public void testAllLatEqual() throws Exception { public void testAllLatEqual() throws Exception {
@ -150,7 +146,7 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
lats[docID] = lat; lats[docID] = lat;
} }
verify(small, lats, lons); verify(small, lats, lons, false);
} }
public void testAllLonEqual() throws Exception { public void testAllLonEqual() throws Exception {
@ -203,7 +199,7 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
lons[docID] = theLon; lons[docID] = theLon;
} }
verify(small, lats, lons); verify(small, lats, lons, false);
} }
public void testMultiValued() throws Exception { public void testMultiValued() throws Exception {
@ -330,21 +326,25 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
public void testRandomTiny() throws Exception { public void testRandomTiny() throws Exception {
// Make sure single-leaf-node case is OK: // Make sure single-leaf-node case is OK:
doTestRandom(10); doTestRandom(10, false);
} }
public void testRandomMedium() throws Exception { public void testRandomMedium() throws Exception {
doTestRandom(10000); doTestRandom(10000, false);
}
public void testRandomWithThreads() throws Exception {
doTestRandom(10000, true);
} }
@Nightly @Nightly
public void testRandomBig() throws Exception { public void testRandomBig() throws Exception {
assumeFalse("Direct codec can OOME on this test", TestUtil.getDocValuesFormat(FIELD_NAME).equals("Direct")); assumeFalse("Direct codec can OOME on this test", TestUtil.getDocValuesFormat(FIELD_NAME).equals("Direct"));
assumeFalse("Memory codec can OOME on this test", TestUtil.getDocValuesFormat(FIELD_NAME).equals("Memory")); assumeFalse("Memory codec can OOME on this test", TestUtil.getDocValuesFormat(FIELD_NAME).equals("Memory"));
doTestRandom(200000); doTestRandom(200000, false);
} }
private void doTestRandom(int count) throws Exception { private void doTestRandom(int count, boolean useThreads) throws Exception {
int numPoints = atLeast(count); int numPoints = atLeast(count);
@ -412,7 +412,7 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
} }
} }
verify(small, lats, lons); verify(small, lats, lons, useThreads);
} }
public double randomLat(boolean small) { public double randomLat(boolean small) {
@ -572,7 +572,7 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
protected abstract void describe(int docID, double lat, double lon); protected abstract void describe(int docID, double lat, double lon);
} }
protected void verify(boolean small, double[] lats, double[] lons) throws Exception { protected void verify(boolean small, double[] lats, double[] lons, boolean useThreads) throws Exception {
IndexWriterConfig iwc = newIndexWriterConfig(); IndexWriterConfig iwc = newIndexWriterConfig();
// Else we can get O(N^2) merging: // Else we can get O(N^2) merging:
int mbd = iwc.getMaxBufferedDocs(); int mbd = iwc.getMaxBufferedDocs();
@ -617,7 +617,12 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
IndexSearcher s = newSearcher(r, false); IndexSearcher s = newSearcher(r, false);
// Make sure queries are thread safe: // Make sure queries are thread safe:
int numThreads = TestUtil.nextInt(random(), 2, 5); int numThreads;
if (useThreads) {
numThreads = TestUtil.nextInt(random(), 2, 5);
} else {
numThreads = 1;
}
List<Thread> threads = new ArrayList<>(); List<Thread> threads = new ArrayList<>();
final int iters = atLeast(75); final int iters = atLeast(75);
@ -638,7 +643,9 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
} }
private void _run() throws Exception { private void _run() throws Exception {
startingGun.await(); if (useThreads) {
startingGun.await();
}
NumericDocValues docIDToID = MultiDocValues.getNumericValues(r, "id"); NumericDocValues docIDToID = MultiDocValues.getNumericValues(r, "id");
@ -769,12 +776,19 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
} }
}; };
thread.setName("T" + i); thread.setName("T" + i);
thread.start(); if (useThreads) {
thread.start();
} else {
// Just run with main thread:
thread.run();
}
threads.add(thread); threads.add(thread);
} }
startingGun.countDown(); if (useThreads) {
for(Thread thread : threads) { startingGun.countDown();
thread.join(); for(Thread thread : threads) {
thread.join();
}
} }
IOUtils.close(r, dir); IOUtils.close(r, dir);
assertFalse(failed.get()); assertFalse(failed.get());
@ -782,7 +796,6 @@ public abstract class BaseGeoPointTestCase extends LuceneTestCase {
public void testRectBoundariesAreInclusive() throws Exception { public void testRectBoundariesAreInclusive() throws Exception {
GeoRect rect = randomRect(random().nextBoolean(), false); GeoRect rect = randomRect(random().nextBoolean(), false);
Query query = newRectQuery(FIELD_NAME, rect);
Directory dir = newDirectory(); Directory dir = newDirectory();
IndexWriterConfig iwc = newIndexWriterConfig(); IndexWriterConfig iwc = newIndexWriterConfig();
RandomIndexWriter w = new RandomIndexWriter(random(), dir, iwc); RandomIndexWriter w = new RandomIndexWriter(random(), dir, iwc);