mirror of https://github.com/apache/lucene.git
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:
parent
b6c1db99d3
commit
c2df0c51b6
|
@ -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);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue