SOLR-5989: Pass add and delete fails to checkShardConsistency call in ChaosMonkeyNothingisSafeTest so that legal differences are ignored.

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1588403 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Mark Robert Miller 2014-04-18 02:37:12 +00:00
parent 389a4b93dc
commit abed84e836
2 changed files with 26 additions and 7 deletions

View File

@ -19,6 +19,7 @@ package org.apache.solr.cloud;
import java.net.ConnectException; import java.net.ConnectException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@ -128,11 +129,13 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
del("*:*"); del("*:*");
List<StopableThread> threads = new ArrayList<>(); List<StopableThread> threads = new ArrayList<>();
List<StopableIndexingThread> indexTreads = new ArrayList<>();
int threadCount = TEST_NIGHTLY ? 3 : 1; int threadCount = TEST_NIGHTLY ? 3 : 1;
int i = 0; int i = 0;
for (i = 0; i < threadCount; i++) { for (i = 0; i < threadCount; i++) {
StopableIndexingThread indexThread = new StopableIndexingThread(controlClient, cloudClient, Integer.toString(i), true); StopableIndexingThread indexThread = new StopableIndexingThread(controlClient, cloudClient, Integer.toString(i), true);
threads.add(indexThread); threads.add(indexThread);
indexTreads.add(indexThread);
indexThread.start(); indexThread.start();
} }
@ -213,9 +216,12 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
} }
} }
Set<String> addFails = getAddFails(indexTreads);
Set<String> deleteFails = getDeleteFails(indexTreads);
// full throttle thread can // full throttle thread can
// have request fails // have request fails
checkShardConsistency(!runFullThrottle, true); checkShardConsistency(!runFullThrottle, true, addFails, deleteFails);
long ctrlDocs = controlClient.query(new SolrQuery("*:*")).getResults() long ctrlDocs = controlClient.query(new SolrQuery("*:*")).getResults()
.getNumFound(); .getNumFound();
@ -250,7 +256,7 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
List<Integer> numShardsNumReplicas = new ArrayList<>(2); List<Integer> numShardsNumReplicas = new ArrayList<>(2);
numShardsNumReplicas.add(1); numShardsNumReplicas.add(1);
numShardsNumReplicas.add(1); numShardsNumReplicas.add(1);
checkForCollection("testcollection",numShardsNumReplicas, null); checkForCollection("testcollection", numShardsNumReplicas, null);
testsSuccesful = true; testsSuccesful = true;
} finally { } finally {
@ -260,6 +266,22 @@ public class ChaosMonkeyNothingIsSafeTest extends AbstractFullDistribZkTestBase
} }
} }
private Set<String> getAddFails(List<StopableIndexingThread> threads) {
Set<String> addFails = new HashSet<String>();
for (StopableIndexingThread thread : threads) {
addFails.addAll(thread.getAddFails());
}
return addFails;
}
private Set<String> getDeleteFails(List<StopableIndexingThread> threads) {
Set<String> deleteFails = new HashSet<String>();
for (StopableIndexingThread thread : threads) {
deleteFails.addAll(thread.getDeleteFails());
}
return deleteFails;
}
class FullThrottleStopableIndexingThread extends StopableIndexingThread { class FullThrottleStopableIndexingThread extends StopableIndexingThread {
private HttpClient httpClient = HttpClientUtil.createClient(null); private HttpClient httpClient = HttpClientUtil.createClient(null);
private volatile boolean stop = false; private volatile boolean stop = false;

View File

@ -1133,10 +1133,7 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
return sb.toString(); return sb.toString();
} }
boolean checkForLegalDiff(SolrDocumentList a, SolrDocumentList b, String aName, String bName, Set<String> addFails, Set<String> deleteFails) { boolean checkIfDiffIsLegal(SolrDocumentList a, SolrDocumentList b, String aName, String bName, Set<String> addFails, Set<String> deleteFails) {
// System.err.println("######"+aName+ ": " + toStr(a,10));
// System.err.println("######"+bName+ ": " + toStr(b,10));
//System.err.println("###### sizes=" + a.size() + "," + b.size());
boolean legal = true; boolean legal = true;
Set<SolrDocument> setA = new HashSet<>(); Set<SolrDocument> setA = new HashSet<>();
for (SolrDocument sdoc : a) { for (SolrDocument sdoc : a) {
@ -1321,7 +1318,7 @@ public abstract class AbstractFullDistribZkTestBase extends AbstractDistribZkTes
}; };
if (addFails != null || deleteFails != null) { if (addFails != null || deleteFails != null) {
boolean legal = checkForLegalDiff(controlDocList, cloudDocList, boolean legal = checkIfDiffIsLegal(controlDocList, cloudDocList,
"controlDocList", "cloudDocList", addFails, deleteFails); "controlDocList", "cloudDocList", addFails, deleteFails);
if (legal) { if (legal) {
return false; return false;