SOLR-10079: Increasing threadpool termination to 15s, clearIndex() to do clean replica indexes as well

This commit is contained in:
Ishan Chattopadhyaya 2017-03-13 16:55:50 +05:30
parent b64382bb07
commit d5181ec8e5
1 changed files with 68 additions and 21 deletions

View File

@ -151,15 +151,18 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
"docValues",Boolean.TRUE));
// Do the tests now:
reorderedDBQIndividualReplicaTest();
testDBQUsingUpdatedFieldFromDroppedUpdate();
outOfOrderDBQsTest();
docValuesUpdateTest();
ensureRtgWorksWithPartialUpdatesTest();
delayedReorderingFetchesMissingUpdateFromLeaderTest();
outOfOrderUpdatesIndividualReplicaTest();
outOfOrderDeleteUpdatesIndividualReplicaTest();
reorderedDBQsWithInPlaceUpdatesShouldNotThrowReplicaInLIRTest();
delayedReorderingFetchesMissingUpdateFromLeaderTest();
updatingDVsInAVeryOldSegment();
// TODO Should we combine all/some of these into a single test, so as to cut down on execution time?
reorderedDBQIndividualReplicaTest();
reorderedDeletesTest();
reorderedDBQsSimpleTest();
reorderedDBQsResurrectionTest();
reorderedDBQsUsingUpdatedValueFromADroppedUpdate();
}
private void mapReplicasToClients() throws KeeperException, InterruptedException {
@ -195,7 +198,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
final int NUM_RETRIES = 100, WAIT_TIME = 10;
// The following should work: full update to doc 0, in-place update for doc 0, delete doc 0
private void outOfOrderDBQsTest() throws Exception {
private void reorderedDBQsSimpleTest() throws Exception {
clearIndex();
commit();
@ -243,7 +246,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
threadpool.shutdown();
assertTrue("Thread pool didn't terminate within 10 secs", threadpool.awaitTermination(10, TimeUnit.SECONDS));
assertTrue("Thread pool didn't terminate within 15 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
// assert all requests were successful
for (Future<UpdateResponse> resp: updateResponses) {
@ -256,7 +259,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
assertNull("This doc was supposed to have been deleted, but was: " + doc, doc);
}
log.info("outOfOrderDeleteUpdatesIndividualReplicaTest: This test passed fine...");
log.info("reorderedDBQsSimpleTest: This test passed fine...");
clearIndex();
commit();
}
@ -294,7 +297,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
threadpool.shutdown();
assertTrue("Thread pool didn't terminate within 10 secs", threadpool.awaitTermination(10, TimeUnit.SECONDS));
assertTrue("Thread pool didn't terminate within 15 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
// assert all requests were successful
for (Future<UpdateResponse> resp: updateResponses) {
@ -390,6 +393,36 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
log.info("docValuesUpdateTest: This test passed fine...");
}
/**
* Ingest many documents, keep committing. Then update a document from a very old segment.
*/
private void updatingDVsInAVeryOldSegment() throws Exception {
clearIndex();
commit();
String id = String.valueOf(Integer.MAX_VALUE);
index("id", id, "inplace_updatable_float", "1", "title_s", "newtitle");
// create 10 more segments
for (int i=0; i<10; i++) {
buildRandomIndex(101.0F, Collections.emptyList());
}
index("id", id, "inplace_updatable_float", map("inc", "1"));
for (SolrClient client: new SolrClient[] {LEADER, NONLEADERS.get(0), NONLEADERS.get(1)}) {
assertEquals("newtitle", client.getById(id).get("title_s"));
assertEquals(2.0f, client.getById(id).get("inplace_updatable_float"));
}
commit();
for (SolrClient client: new SolrClient[] {LEADER, NONLEADERS.get(0), NONLEADERS.get(1)}) {
assertEquals("newtitle", client.getById(id).get("title_s"));
assertEquals(2.0f, client.getById(id).get("inplace_updatable_float"));
}
log.info("updatingDVsInAVeryOldSegment: This test passed fine...");
}
/**
* Retries the specified 'req' against each SolrClient in "clients" untill the expected number of
* results are returned, at which point the results are verified using assertDocIdsAndValuesInResults
@ -610,7 +643,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
threadpool.shutdown();
assertTrue("Thread pool didn't terminate within 10 secs", threadpool.awaitTermination(10, TimeUnit.SECONDS));
assertTrue("Thread pool didn't terminate within 15 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
// assert all requests were successful
for (Future<UpdateResponse> resp: updateResponses) {
@ -633,7 +666,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
// The following should work: full update to doc 0, in-place update for doc 0, delete doc 0
private void outOfOrderDeleteUpdatesIndividualReplicaTest() throws Exception {
private void reorderedDeletesTest() throws Exception {
clearIndex();
commit();
@ -680,7 +713,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
threadpool.shutdown();
assertTrue("Thread pool didn't terminate within 10 secs", threadpool.awaitTermination(10, TimeUnit.SECONDS));
assertTrue("Thread pool didn't terminate within 15 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
// assert all requests were successful
for (Future<UpdateResponse> resp: updateResponses) {
@ -693,7 +726,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
assertNull("This doc was supposed to have been deleted, but was: " + doc, doc);
}
log.info("outOfOrderDeleteUpdatesIndividualReplicaTest: This test passed fine...");
log.info("reorderedDeletesTest: This test passed fine...");
clearIndex();
commit();
}
@ -707,7 +740,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
DBQ(q=val:10, v=4)
DV(id=x, val=5, ver=3)
*/
private void reorderedDBQsWithInPlaceUpdatesShouldNotThrowReplicaInLIRTest() throws Exception {
private void reorderedDBQsResurrectionTest() throws Exception {
clearIndex();
commit();
@ -754,7 +787,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
threadpool.shutdown();
assertTrue("Thread pool didn't terminate within 10 secs", threadpool.awaitTermination(10, TimeUnit.SECONDS));
assertTrue("Thread pool didn't terminate within 15 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
int successful = 0;
for (Future<UpdateResponse> resp: updateResponses) {
@ -794,7 +827,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
assertEquals("Client: "+((HttpSolrClient)client).getBaseURL(), 5, doc.getFieldValue(field));
}
log.info("reorderedDBQsWithInPlaceUpdatesShouldNotThrowReplicaInLIRTest: This test passed fine...");
log.info("reorderedDBQsResurrectionTest: This test passed fine...");
clearIndex();
commit();
}
@ -829,7 +862,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
}
threadpool.shutdown();
assertTrue("Thread pool didn't terminate within 10 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
assertTrue("Thread pool didn't terminate within 15 secs", threadpool.awaitTermination(15, TimeUnit.SECONDS));
commit();
@ -1104,7 +1137,7 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
* inp(id=1,inpfield=14,prevVersion=2,version=3) // will wait till timeout, and then fetch a "not found" from leader
* dbq("inp:14",version=4)
*/
private void testDBQUsingUpdatedFieldFromDroppedUpdate() throws Exception {
private void reorderedDBQsUsingUpdatedValueFromADroppedUpdate() throws Exception {
clearIndex();
commit();
@ -1161,7 +1194,21 @@ public class TestInPlaceUpdatesDistrib extends AbstractFullDistribZkTestBase {
assertNull(client.getById("1", params("distrib", "false")));
}
log.info("testDBQUsingUpdatedFieldFromDroppedUpdate: This test passed fine...");
log.info("reorderedDBQsUsingUpdatedValueFromADroppedUpdate: This test passed fine...");
}
@Override
public void clearIndex() {
super.clearIndex();
try {
for (SolrClient client: new SolrClient[] {LEADER, NONLEADERS.get(0), NONLEADERS.get(1)}) {
if (client != null) {
client.request(simulatedDeleteRequest("*:*", -Long.MAX_VALUE));
client.commit();
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}