You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2014/04/13 23:35:10 UTC
svn commit: r1587100 - in /lucene/dev/branches/branch_4x: ./ solr/ solr/core/
solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
Author: markrmiller
Date: Sun Apr 13 21:35:10 2014
New Revision: 1587100
URL: http://svn.apache.org/r1587100
Log:
tests: harden this test due to a current short coming in the collections api.
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java?rev=1587100&r1=1587099&r2=1587100&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudCluster.java Sun Apr 13 21:35:10 2014
@@ -21,6 +21,7 @@ import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
@@ -136,6 +137,8 @@ public class TestMiniSolrCloudCluster ex
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "1");
+ ZkStateReader zkStateReader = new ZkStateReader(zkClient);
+ waitForRecoveriesToFinish(collectionName, zkStateReader, true, true, 330);
cloudSolrServer.add(doc);
cloudSolrServer.commit();
SolrQuery query = new SolrQuery();
@@ -144,7 +147,6 @@ public class TestMiniSolrCloudCluster ex
assertEquals(1, rsp.getResults().getNumFound());
// remove a server not hosting any replicas
- ZkStateReader zkStateReader = new ZkStateReader(zkClient);
zkStateReader.updateClusterState(true);
ClusterState clusterState = zkStateReader.getClusterState();
HashMap<String, JettySolrRunner> jettyMap = new HashMap<String, JettySolrRunner>();
@@ -226,4 +228,55 @@ public class TestMiniSolrCloudCluster ex
request.setPath("/admin/collections");
return server.request(request);
}
+
+ protected void waitForRecoveriesToFinish(String collection,
+ ZkStateReader zkStateReader, boolean verbose, boolean failOnTimeout, int timeoutSeconds)
+ throws Exception {
+ log.info("Wait for recoveries to finish - collection: " + collection + " failOnTimeout:" + failOnTimeout + " timeout (sec):" + timeoutSeconds);
+ boolean cont = true;
+ int cnt = 0;
+
+ while (cont) {
+ if (verbose) System.out.println("-");
+ boolean sawLiveRecovering = false;
+ zkStateReader.updateClusterState(true);
+ ClusterState clusterState = zkStateReader.getClusterState();
+ Map<String,Slice> slices = clusterState.getSlicesMap(collection);
+ assertNotNull("Could not find collection:" + collection, slices);
+ for (Map.Entry<String,Slice> entry : slices.entrySet()) {
+ Map<String,Replica> shards = entry.getValue().getReplicasMap();
+ for (Map.Entry<String,Replica> shard : shards.entrySet()) {
+ if (verbose) System.out.println("rstate:"
+ + shard.getValue().getStr(ZkStateReader.STATE_PROP)
+ + " live:"
+ + clusterState.liveNodesContain(shard.getValue().getNodeName()));
+ String state = shard.getValue().getStr(ZkStateReader.STATE_PROP);
+ if ((state.equals(ZkStateReader.RECOVERING) || state
+ .equals(ZkStateReader.SYNC) || state.equals(ZkStateReader.DOWN))
+ && clusterState.liveNodesContain(shard.getValue().getStr(
+ ZkStateReader.NODE_NAME_PROP))) {
+ sawLiveRecovering = true;
+ }
+ }
+ }
+ if (!sawLiveRecovering || cnt == timeoutSeconds) {
+ if (!sawLiveRecovering) {
+ if (verbose) System.out.println("no one is recoverying");
+ } else {
+ if (verbose) System.out.println("Gave up waiting for recovery to finish..");
+ if (failOnTimeout) {
+ fail("There are still nodes recoverying - waited for " + timeoutSeconds + " seconds");
+ // won't get here
+ return;
+ }
+ }
+ cont = false;
+ } else {
+ Thread.sleep(1000);
+ }
+ cnt++;
+ }
+
+ log.info("Recoveries finished - collection: " + collection);
+ }
}