Improve test. All exceptions get logged in all cases by LTC.

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1150718 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Uwe Schindler 2011-07-25 14:26:01 +00:00
parent b6c1db99d3
commit c2df0c51b6
1 changed files with 64 additions and 76 deletions

View File

@ -84,7 +84,6 @@ public class TestRealTimeGet extends SolrTestCaseJ4 {
long committedModelClock; long committedModelClock;
volatile int lastId; volatile int lastId;
final String field = "val_l"; final String field = "val_l";
volatile Throwable ex;
@Test @Test
public void testStressGetRealtime() throws Exception { public void testStressGetRealtime() throws Exception {
@ -118,61 +117,56 @@ public class TestRealTimeGet extends SolrTestCaseJ4 {
@Override @Override
public void run() { public void run() {
try { while (operations.get() > 0) {
while (operations.get() > 0) { int oper = rand.nextInt(100);
int oper = rand.nextInt(100); int id = rand.nextInt(ndocs);
int id = rand.nextInt(ndocs); Long val = model.get(id);
Long val = model.get(id); long nextVal = Math.abs(val)+1;
long nextVal = Math.abs(val)+1;
// set the lastId before we actually change it sometimes to try and // set the lastId before we actually change it sometimes to try and
// uncover more race conditions between writing and reading // uncover more race conditions between writing and reading
boolean before = random.nextBoolean(); boolean before = random.nextBoolean();
if (before) { if (before) {
lastId = id; lastId = id;
} }
if (oper < commitPercent) { if (oper < commitPercent) {
if (numCommitting.incrementAndGet() <= maxConcurrentCommits) { if (numCommitting.incrementAndGet() <= maxConcurrentCommits) {
Map<Integer,Long> newCommittedModel; Map<Integer,Long> newCommittedModel;
long version; long version;
synchronized(TestRealTimeGet.this) { synchronized(TestRealTimeGet.this) {
newCommittedModel = new HashMap<Integer,Long>(model); // take a snapshot newCommittedModel = new HashMap<Integer,Long>(model); // take a snapshot
version = snapshotCount++; version = snapshotCount++;
} }
if (rand.nextInt(100) < softCommitPercent) if (rand.nextInt(100) < softCommitPercent)
assertU(h.commit("softCommit","true")); assertU(h.commit("softCommit","true"));
else else
assertU(commit()); assertU(commit());
synchronized(TestRealTimeGet.this) { synchronized(TestRealTimeGet.this) {
// install this snapshot only if it's newer than the current one // install this snapshot only if it's newer than the current one
if (version >= committedModelClock) { if (version >= committedModelClock) {
committedModel = newCommittedModel; committedModel = newCommittedModel;
committedModelClock = version; committedModelClock = version;
}
} }
} }
numCommitting.decrementAndGet();
} else if (oper < commitPercent + deletePercent) {
assertU("<delete><id>" + id + "</id></delete>");
model.put(id, -nextVal);
} else if (oper < commitPercent + deletePercent + deleteByQueryPercent) {
assertU("<delete><query>id:" + id + "</query></delete>");
model.put(id, -nextVal);
} else {
assertU(adoc("id",Integer.toString(id), field, Long.toString(nextVal)));
}
if (!before) {
lastId = id;
} }
numCommitting.decrementAndGet();
} else if (oper < commitPercent + deletePercent) {
assertU("<delete><id>" + id + "</id></delete>");
model.put(id, -nextVal);
} else if (oper < commitPercent + deletePercent + deleteByQueryPercent) {
assertU("<delete><query>id:" + id + "</query></delete>");
model.put(id, -nextVal);
} else {
assertU(adoc("id",Integer.toString(id), field, Long.toString(nextVal)));
}
if (!before) {
lastId = id;
} }
} catch (Throwable e) {
ex = e;
SolrException.log(log,e);
} }
} }
}; };
@ -187,33 +181,33 @@ public class TestRealTimeGet extends SolrTestCaseJ4 {
@Override @Override
public void run() { public void run() {
try { while (operations.decrementAndGet() >= 0) {
while (operations.decrementAndGet() >= 0) { int oper = rand.nextInt(100);
int oper = rand.nextInt(100); // bias toward a recently changed doc
// bias toward a recently changed doc int id = rand.nextInt(100) < 25 ? lastId : rand.nextInt(ndocs);
int id = rand.nextInt(100) < 25 ? lastId : rand.nextInt(ndocs);
// when indexing, we update the index, then the model // when indexing, we update the index, then the model
// so when querying, we should first check the model, and then the index // so when querying, we should first check the model, and then the index
boolean realTime = rand.nextInt(100) < percentRealtimeQuery; boolean realTime = rand.nextInt(100) < percentRealtimeQuery;
long val; long val;
if (realTime) { if (realTime) {
val = model.get(id); val = model.get(id);
} else { } else {
synchronized(TestRealTimeGet.this) { synchronized(TestRealTimeGet.this) {
val = committedModel.get(id); val = committedModel.get(id);
}
} }
}
SolrQueryRequest sreq; SolrQueryRequest sreq;
if (realTime) { if (realTime) {
sreq = req("wt","json", "qt","/get", "ids",Integer.toString(id)); sreq = req("wt","json", "qt","/get", "ids",Integer.toString(id));
} else { } else {
sreq = req("wt","json", "q","id:"+Integer.toString(id), "omitHeader","true"); sreq = req("wt","json", "q","id:"+Integer.toString(id), "omitHeader","true");
} }
try {
String response = h.query(sreq); String response = h.query(sreq);
Map rsp = (Map)ObjectBuilder.fromJSON(response); Map rsp = (Map)ObjectBuilder.fromJSON(response);
List doclist = (List)(((Map)rsp.get("response")).get("docs")); List doclist = (List)(((Map)rsp.get("response")).get("docs"));
@ -224,13 +218,10 @@ public class TestRealTimeGet extends SolrTestCaseJ4 {
long foundVal = (Long)(((Map)doclist.get(0)).get(field)); long foundVal = (Long)(((Map)doclist.get(0)).get(field));
assertTrue(foundVal >= Math.abs(val)); assertTrue(foundVal >= Math.abs(val));
} }
} catch (Exception e) {
fail(e.toString());
} }
} }
catch (Throwable e) {
ex = e;
operations.set(-1L);
SolrException.log(log,e);
}
} }
}; };
@ -245,9 +236,6 @@ public class TestRealTimeGet extends SolrTestCaseJ4 {
for (Thread thread : threads) { for (Thread thread : threads) {
thread.join(); thread.join();
} }
assertNull(ex);
} }
} }