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 2018/11/29 18:19:18 UTC
[09/16] lucene-solr:master: SOLR-12801: Make massive improvements to
the tests.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeNoTargetTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeNoTargetTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeNoTargetTest.java
index 16fb146..6fd2b89 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeNoTargetTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeNoTargetTest.java
@@ -57,7 +57,6 @@ public class ReplaceNodeNoTargetTest extends SolrCloudTestCase {
@Test
@LuceneTestCase.AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/SOLR-11067")
public void test() throws Exception {
- cluster.waitForAllNodes(5000);
String coll = "replacenodetest_coll_notarget";
log.info("total_jettys: " + cluster.getJettySolrRunners().size());
@@ -76,6 +75,7 @@ public class ReplaceNodeNoTargetTest extends SolrCloudTestCase {
log.info("Creating collection...");
CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(coll, "conf1", 5, 2, 0, 0);
cloudClient.request(create);
+ cluster.waitForActiveCollection(coll, 5, 10);
log.info("Current core status list for node we plan to decommision: {} => {}",
node2bdecommissioned,
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
index fbee9de..0412330 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplaceNodeTest.java
@@ -59,7 +59,6 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
@Test
public void test() throws Exception {
- cluster.waitForAllNodes(5000);
String coll = "replacenodetest_coll";
log.info("total_jettys: " + cluster.getJettySolrRunners().size());
@@ -72,18 +71,23 @@ public class ReplaceNodeTest extends SolrCloudTestCase {
CollectionAdminRequest.Create create;
// NOTE: always using the createCollection that takes in 'int' for all types of replicas, so we never
// have to worry about null checking when comparing the Create command with the final Slices
+
+ // TODO: tlog replicas do not work correctly in tests due to fault TestInjection#waitForInSyncWithLeader
create = pickRandom(
CollectionAdminRequest.createCollection(coll, "conf1", 5, 2,0,0),
- CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,1,0),
- CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,1),
- CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,1),
- CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,2,0),
+ //CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,1,0),
+ //CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,1),
+ //CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,1),
+ //CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,2,0),
// check also replicationFactor 1
- CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,0),
- CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,0)
+ CollectionAdminRequest.createCollection(coll, "conf1", 5, 1,0,0)
+ //CollectionAdminRequest.createCollection(coll, "conf1", 5, 0,1,0)
);
create.setCreateNodeSet(StrUtils.join(l, ',')).setMaxShardsPerNode(3);
cloudClient.request(create);
+
+ cluster.waitForActiveCollection(coll, 5, 5 * (create.getNumNrtReplicas() + create.getNumPullReplicas() + create.getNumTlogReplicas()));
+
DocCollection collection = cloudClient.getZkStateReader().getClusterState().getCollection(coll);
log.debug("### Before decommission: " + collection);
log.info("excluded_node : {} ", emptyNode);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
index c4135b5..9feadfe 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
@@ -24,6 +24,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
+import java.util.concurrent.TimeoutException;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.util.LuceneTestCase.Slow;
@@ -472,7 +473,7 @@ public class ReplicationFactorTest extends AbstractFullDistribZkTestBase {
}
}
- void createCollectionWithRetry(String testCollectionName, String config, int numShards, int replicationFactor, int maxShardsPerNode) throws IOException, SolrServerException, InterruptedException {
+ void createCollectionWithRetry(String testCollectionName, String config, int numShards, int replicationFactor, int maxShardsPerNode) throws IOException, SolrServerException, InterruptedException, TimeoutException {
CollectionAdminResponse resp = createCollection(testCollectionName, "conf1", numShards, replicationFactor, maxShardsPerNode);
if (resp.getResponse().get("failure") != null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/RestartWhileUpdatingTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/RestartWhileUpdatingTest.java b/solr/core/src/test/org/apache/solr/cloud/RestartWhileUpdatingTest.java
index 75f4266..f33e01f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/RestartWhileUpdatingTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/RestartWhileUpdatingTest.java
@@ -22,7 +22,6 @@ import java.util.List;
import org.apache.lucene.util.LuceneTestCase.Nightly;
import org.apache.lucene.util.LuceneTestCase.Slow;
-import org.apache.solr.SolrTestCaseJ4.SuppressObjectReleaseTracker;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.util.TestInjection;
@@ -32,7 +31,6 @@ import org.junit.Test;
@Slow
@Nightly
-@SuppressObjectReleaseTracker(bugUrl="this is a purposely leaky test")
public class RestartWhileUpdatingTest extends AbstractFullDistribZkTestBase {
//private static final String DISTRIB_UPDATE_CHAIN = "distrib-update-chain";
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java b/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
index 53e7131..59f599a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
@@ -101,7 +101,7 @@ public class RollingRestartTest extends AbstractFullDistribZkTestBase {
fail("No overseer designate as leader found after restart #" + (i + 1) + ": " + leader);
}
}
- assertTrue("Unable to restart (#" + i + "): " + cloudJetty, ChaosMonkey.start(cloudJetty.jetty));
+ cloudJetty.jetty.start();
boolean success = waitUntilOverseerDesignateIsLeader(cloudClient.getZkStateReader().getZkClient(), designates, MAX_WAIT_TIME);
if (!success) {
leader = OverseerCollectionConfigSetProcessor.getLeaderNode(cloudClient.getZkStateReader().getZkClient());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
index f3efd63..55d2dde 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.cloud;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.util.LuceneTestCase.Slow;
+import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
@@ -51,10 +52,10 @@ import static org.apache.solr.common.util.Utils.makeMap;
*/
@Slow
@SuppressSSL
+@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // 17-Mar-2018
public class SSLMigrationTest extends AbstractFullDistribZkTestBase {
@Test
- @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // 17-Mar-2018
public void test() throws Exception {
//Migrate from HTTP -> HTTPS -> HTTP
assertReplicaInformation("http");
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/SaslZkACLProviderTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SaslZkACLProviderTest.java b/solr/core/src/test/org/apache/solr/cloud/SaslZkACLProviderTest.java
index 3422633..38e2ab6 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SaslZkACLProviderTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SaslZkACLProviderTest.java
@@ -30,6 +30,7 @@ import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkACLProvider;
import org.apache.solr.util.BadZookeeperThreadsFilter;
import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.KeeperException;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -39,7 +40,7 @@ import org.slf4j.LoggerFactory;
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
@ThreadLeakFilters(defaultFilters = true, filters = {
- BadZookeeperThreadsFilter.class // hdfs currently leaks thread(s)
+ BadZookeeperThreadsFilter.class
})
public class SaslZkACLProviderTest extends SolrTestCaseJ4 {
@@ -114,8 +115,6 @@ public class SaslZkACLProviderTest extends SolrTestCaseJ4 {
}
@Test
- //commented 9-Aug-2018 @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // 05-Jul-2018
- @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // added 15-Sep-2018
public void testSaslZkACLProvider() throws Exception {
// Test with Sasl enabled
SolrZkClient zkClient = new SolrZkClientWithACLs(zkServer.getZkAddress(), AbstractZkTestCase.TIMEOUT);
@@ -178,18 +177,18 @@ public class SaslZkACLProviderTest extends SolrTestCaseJ4 {
private String kdcDir;
private KerberosTestServices kerberosTestServices;
- public SaslZkTestServer(String zkDir, String kdcDir) {
+ public SaslZkTestServer(String zkDir, String kdcDir) throws Exception {
super(zkDir);
this.kdcDir = kdcDir;
}
- public SaslZkTestServer(String zkDir, int port, String kdcDir) {
+ public SaslZkTestServer(String zkDir, int port, String kdcDir) throws KeeperException, InterruptedException {
super(zkDir, port);
this.kdcDir = kdcDir;
}
@Override
- public void run() throws InterruptedException {
+ public void run() throws InterruptedException, IOException {
try {
// Don't require that credentials match the entire principal string, e.g.
// can match "solr" rather than "solr/host@DOMAIN"
@@ -202,6 +201,7 @@ public class SaslZkACLProviderTest extends SolrTestCaseJ4 {
kerberosTestServices = KerberosTestServices.builder()
.withKdc(new File(kdcDir))
.withJaasConfiguration(zkClientPrincipal, keytabFile, zkServerPrincipal, keytabFile)
+
.build();
kerberosTestServices.start();
@@ -209,15 +209,15 @@ public class SaslZkACLProviderTest extends SolrTestCaseJ4 {
} catch (Exception ex) {
throw new RuntimeException(ex);
}
- super.run();
+ super.run(false);
}
@Override
public void shutdown() throws IOException, InterruptedException {
- super.shutdown();
System.clearProperty("zookeeper.authProvider.1");
System.clearProperty("zookeeper.kerberos.removeRealmFromPrincipal");
System.clearProperty("zookeeper.kerberos.removeHostFromPrincipal");
+ super.shutdown();
kerberosTestServices.stop();
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/ShardRoutingCustomTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/ShardRoutingCustomTest.java b/solr/core/src/test/org/apache/solr/cloud/ShardRoutingCustomTest.java
index d7cd4a8..9a97264 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ShardRoutingCustomTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ShardRoutingCustomTest.java
@@ -56,12 +56,13 @@ public class ShardRoutingCustomTest extends AbstractFullDistribZkTestBase {
private void doCustomSharding() throws Exception {
printLayout();
- int totalReplicas = getTotalReplicas(collection);
+
File jettyDir = createTempDir("jetty").toFile();
jettyDir.mkdirs();
setupJettySolrHome(jettyDir);
JettySolrRunner j = createJetty(jettyDir, createTempDir().toFile().getAbsolutePath(), "shardA", "solrconfig.xml", null);
+ j.start();
assertEquals(0, CollectionAdminRequest
.createCollection(DEFAULT_COLLECTION, "conf1", 1, 1)
.setStateFormat(Integer.parseInt(getStateFormat()))
@@ -76,19 +77,7 @@ public class ShardRoutingCustomTest extends AbstractFullDistribZkTestBase {
SolrClient client = createNewSolrClient(j.getLocalPort());
clients.add(client);
- int retries = 60;
- while (--retries >= 0) {
- // total replicas changed.. assume it was us
- if (getTotalReplicas(collection) != totalReplicas) {
- break;
- }
- Thread.sleep(500);
- }
-
- if (retries <= 0) {
- fail("Timeout waiting for " + j + " to appear in clusterstate");
- printLayout();
- }
+ waitForActiveReplicaCount(cloudClient, DEFAULT_COLLECTION, 1);
updateMappingsFromZk(this.jettys, this.clients);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java b/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
index 4fac532..735cc20 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SharedFSAutoReplicaFailoverTest.java
@@ -217,8 +217,8 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
assertUlogDir(collections);
- ChaosMonkey.stop(jettys.get(1));
- ChaosMonkey.stop(jettys.get(2));
+ jettys.get(1).stop();
+ jettys.get(2).stop();
Thread.sleep(5000);
@@ -249,12 +249,12 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
List<JettySolrRunner> stoppedJetties = allowOverseerRestart
? jettys.stream().filter(jettySolrRunner -> random().nextBoolean()).collect(Collectors.toList()) : notOverseerJetties();
ChaosMonkey.stop(stoppedJetties);
- ChaosMonkey.stop(controlJetty);
+ controlJetty.stop();
assertTrue("Timeout waiting for all not live", waitingForReplicasNotLive(cloudClient.getZkStateReader(), 45000, stoppedJetties));
ChaosMonkey.start(stoppedJetties);
- ChaosMonkey.start(controlJetty);
+ controlJetty.start();
assertSliceAndReplicaCount(collection1, 2, 2, 120000);
assertSliceAndReplicaCount(collection3, 5, 1, 120000);
@@ -266,8 +266,8 @@ public class SharedFSAutoReplicaFailoverTest extends AbstractFullDistribZkTestBa
assertUlogDir(collections);
int jettyIndex = random().nextInt(jettys.size());
- ChaosMonkey.stop(jettys.get(jettyIndex));
- ChaosMonkey.start(jettys.get(jettyIndex));
+ jettys.get(jettyIndex).stop();
+ jettys.get(jettyIndex).start();
assertSliceAndReplicaCount(collection1, 2, 2, 120000);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java b/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java
index 519b978..e6fc954 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java
@@ -71,8 +71,7 @@ public class SolrXmlInZkTest extends SolrTestCaseJ4 {
zkServer = new ZkTestServer(zkDir);
zkServer.run();
System.setProperty("zkHost", zkServer.getZkAddress());
- AbstractZkTestCase.buildZooKeeper(zkServer.getZkHost(),
- zkServer.getZkAddress(), "solrconfig.xml", "schema.xml");
+ zkServer.buildZooKeeper("solrconfig.xml", "schema.xml");
zkClient = new SolrZkClient(zkServer.getZkAddress(), AbstractZkTestCase.TIMEOUT);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java b/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
index a2a2dca..8adff98 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SplitShardTest.java
@@ -58,13 +58,16 @@ public class SplitShardTest extends SolrCloudTestCase {
.createCollection(COLLECTION_NAME, "conf", 2, 1)
.setMaxShardsPerNode(100)
.process(cluster.getSolrClient());
+
+ cluster.waitForActiveCollection(COLLECTION_NAME, 2, 2);
+
CollectionAdminRequest.SplitShard splitShard = CollectionAdminRequest.splitShard(COLLECTION_NAME)
.setNumSubShards(5)
.setShardName("shard1");
splitShard.process(cluster.getSolrClient());
waitForState("Timed out waiting for sub shards to be active. Number of active shards=" +
cluster.getSolrClient().getZkStateReader().getClusterState().getCollection(COLLECTION_NAME).getActiveSlices().size(),
- COLLECTION_NAME, activeClusterShape(6, 1));
+ COLLECTION_NAME, activeClusterShape(6, 7));
try {
splitShard = CollectionAdminRequest.splitShard(COLLECTION_NAME).setShardName("shard2").setNumSubShards(10);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java b/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java
index 43dfe27..c48f22e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java
@@ -136,7 +136,7 @@ public class SyncSliceTest extends AbstractFullDistribZkTestBase {
jetties.remove(leaderJetty);
assertEquals(getShardCount() - 1, jetties.size());
- chaosMonkey.killJetty(leaderJetty);
+ leaderJetty.jetty.stop();
Thread.sleep(3000);
@@ -158,7 +158,7 @@ public class SyncSliceTest extends AbstractFullDistribZkTestBase {
}
// bring back dead node
- ChaosMonkey.start(deadJetty.jetty); // he is not the leader anymore
+ deadJetty.jetty.start(); // he is not the leader anymore
waitTillAllNodesActive();
@@ -202,7 +202,7 @@ public class SyncSliceTest extends AbstractFullDistribZkTestBase {
// kill the current leader
- chaosMonkey.killJetty(leaderJetty);
+ leaderJetty.jetty.stop();
waitForNoShardInconsistency();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
index c795b14..f2047ea 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
@@ -71,7 +71,6 @@ public class TestAuthenticationFramework extends SolrCloudTestCase {
}
@Test
- @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028")
public void testBasics() throws Exception {
collectionCreateSearchDeleteTwice();
@@ -92,6 +91,7 @@ public class TestAuthenticationFramework extends SolrCloudTestCase {
@Override
public void tearDown() throws Exception {
System.clearProperty("authenticationPlugin");
+ shutdownCluster();
super.tearDown();
}
@@ -101,14 +101,15 @@ public class TestAuthenticationFramework extends SolrCloudTestCase {
CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
.setMaxShardsPerNode(maxShardsPerNode)
.processAndWait(cluster.getSolrClient(), 90);
+ cluster.waitForActiveCollection(collectionName, numShards, numShards * numReplicas);
}
else {
CollectionAdminRequest.createCollection(collectionName, configName, numShards, numReplicas)
.setMaxShardsPerNode(maxShardsPerNode)
.process(cluster.getSolrClient());
+ cluster.waitForActiveCollection(collectionName, numShards, numShards * numReplicas);
}
- AbstractDistribZkTestBase.waitForRecoveriesToFinish
- (collectionName, cluster.getSolrClient().getZkStateReader(), true, true, 330);
+
}
public void collectionCreateSearchDeleteTwice() throws Exception {
@@ -122,14 +123,13 @@ public class TestAuthenticationFramework extends SolrCloudTestCase {
assertEquals(0, client.query(collectionName, new SolrQuery("*:*")).getResults().getNumFound());
// modify/query collection
+ Thread.sleep(100); // not everyone is up to date just because we waited to make sure one was - pause a moment
new UpdateRequest().add("id", "1").commit(client, collectionName);
QueryResponse rsp = client.query(collectionName, new SolrQuery("*:*"));
assertEquals(1, rsp.getResults().getNumFound());
// delete the collection
- CollectionAdminRequest.deleteCollection(collectionName).process(client);
- AbstractDistribZkTestBase.waitForCollectionToDisappear
- (collectionName, client.getZkStateReader(), true, true, 330);
+ cluster.deleteAllCollections();
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
index dac1c91..db558c5b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
@@ -29,6 +29,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.JSONTestUtil;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.cloud.SocketProxy;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -39,8 +40,8 @@ import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.TimeSource;
import org.apache.solr.util.TimeOut;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,8 +53,8 @@ public class TestCloudConsistency extends SolrCloudTestCase {
private static Map<JettySolrRunner, SocketProxy> proxies;
private static Map<URI, JettySolrRunner> jettys;
- @BeforeClass
- public static void setupCluster() throws Exception {
+ @Before
+ public void setupCluster() throws Exception {
System.setProperty("solr.directoryFactory", "solr.StandardDirectoryFactory");
System.setProperty("solr.ulog.numRecordsToKeep", "1000");
System.setProperty("leaderVoteWait", "60000");
@@ -76,8 +77,8 @@ public class TestCloudConsistency extends SolrCloudTestCase {
}
}
- @AfterClass
- public static void tearDownCluster() throws Exception {
+ @After
+ public void tearDownCluster() throws Exception {
for (SocketProxy proxy:proxies.values()) {
proxy.close();
}
@@ -86,6 +87,8 @@ public class TestCloudConsistency extends SolrCloudTestCase {
System.clearProperty("solr.directoryFactory");
System.clearProperty("solr.ulog.numRecordsToKeep");
System.clearProperty("leaderVoteWait");
+
+ shutdownCluster();
}
@Test
@@ -117,6 +120,9 @@ public class TestCloudConsistency extends SolrCloudTestCase {
CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
.setNode(cluster.getJettySolrRunner(2).getNodeName())
.process(cluster.getSolrClient());
+
+ cluster.waitForActiveCollection(collectionName, 1, 3);
+
waitForState("Timeout waiting for 1x3 collection", collectionName, clusterShape(1, 3));
addDocs(collectionName, 3, 1);
@@ -142,18 +148,29 @@ public class TestCloudConsistency extends SolrCloudTestCase {
* Leader should be on node - 0
*/
private void addDocToWhenOtherReplicasAreDown(String collection, Replica leader, int docId) throws Exception {
- ChaosMonkey.stop(cluster.getJettySolrRunner(1));
- ChaosMonkey.stop(cluster.getJettySolrRunner(2));
+ JettySolrRunner j1 = cluster.getJettySolrRunner(1);
+ JettySolrRunner j2 = cluster.getJettySolrRunner(2);
+ j1.stop();
+ j2.stop();
+ cluster.waitForJettyToStop(j1);
+ cluster.waitForJettyToStop(j2);
+
waitForState("", collection, (liveNodes, collectionState) ->
collectionState.getSlice("shard1").getReplicas().stream()
.filter(replica -> replica.getState() == Replica.State.DOWN).count() == 2);
addDocs(collection, 1, docId);
- ChaosMonkey.stop(cluster.getJettySolrRunner(0));
+ JettySolrRunner j3 = cluster.getJettySolrRunner(0);
+ j3.stop();
+ cluster.waitForJettyToStop(j3);
waitForState("", collection, (liveNodes, collectionState) -> collectionState.getReplica(leader.getName()).getState() == Replica.State.DOWN);
- ChaosMonkey.start(cluster.getJettySolrRunner(1));
- ChaosMonkey.start(cluster.getJettySolrRunner(2));
+ cluster.getJettySolrRunner(1).start();
+ cluster.getJettySolrRunner(2).start();
+
+ cluster.waitForNode(j1, 30);
+ cluster.waitForNode(j2, 30);
+
TimeOut timeOut = new TimeOut(10, TimeUnit.SECONDS, TimeSource.CURRENT_TIME);
while (!timeOut.hasTimedOut()) {
Replica newLeader = getCollectionState(collection).getSlice("shard1").getLeader();
@@ -162,7 +179,13 @@ public class TestCloudConsistency extends SolrCloudTestCase {
}
}
- ChaosMonkey.start(cluster.getJettySolrRunner(0));
+ JettySolrRunner j0 = cluster.getJettySolrRunner(0);
+ j0.start();
+ cluster.waitForNode(j0, 30);
+
+ // waitForNode not solid yet?
+ cluster.waitForAllNodes(30);
+
waitForState("Timeout waiting for leader", collection, (liveNodes, collectionState) -> {
Replica newLeader = collectionState.getLeader("shard1");
return newLeader != null && newLeader.getName().equals(leader.getName());
@@ -181,7 +204,9 @@ public class TestCloudConsistency extends SolrCloudTestCase {
proxies.get(cluster.getJettySolrRunner(i)).close();
}
addDoc(collection, docId, cluster.getJettySolrRunner(0));
- ChaosMonkey.stop(cluster.getJettySolrRunner(0));
+ JettySolrRunner j1 = cluster.getJettySolrRunner(0);
+ j1.stop();
+ cluster.waitForJettyToStop(j1);
for (int i = 1; i < 3; i++) {
proxies.get(cluster.getJettySolrRunner(i)).reopen();
}
@@ -197,7 +222,8 @@ public class TestCloudConsistency extends SolrCloudTestCase {
}
proxies.get(cluster.getJettySolrRunner(0)).reopen();
- ChaosMonkey.start(cluster.getJettySolrRunner(0));
+ cluster.getJettySolrRunner(0).start();
+ cluster.waitForAllNodes(30);;
waitForState("Timeout waiting for leader", collection, (liveNodes, collectionState) -> {
Replica newLeader = collectionState.getLeader("shard1");
return newLeader != null && newLeader.getName().equals(leader.getName());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
index f210d1c..7558df0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
@@ -108,13 +108,12 @@ public class TestCloudDeleteByQuery extends SolrCloudTestCase {
CollectionAdminRequest.createCollection(COLLECTION_NAME, configName, NUM_SHARDS, REPLICATION_FACTOR)
.setProperties(collectionProperties)
.process(cluster.getSolrClient());
+ cluster.waitForActiveCollection(COLLECTION_NAME, NUM_SHARDS, REPLICATION_FACTOR * NUM_SHARDS);
CLOUD_CLIENT = cluster.getSolrClient();
CLOUD_CLIENT.setDefaultCollection(COLLECTION_NAME);
ZkStateReader zkStateReader = CLOUD_CLIENT.getZkStateReader();
- AbstractDistribZkTestBase.waitForRecoveriesToFinish(COLLECTION_NAME, zkStateReader, true, true, 330);
-
// really hackish way to get a URL for specific nodes based on shard/replica hosting
// inspired by TestMiniSolrCloudCluster
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
index eb8a92e..8512bcb 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudRecovery.java
@@ -20,7 +20,6 @@ package org.apache.solr.cloud;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
-import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -28,11 +27,7 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
-import com.codahale.metrics.Counter;
-import com.codahale.metrics.Metric;
-import com.codahale.metrics.Timer;
import org.apache.commons.io.IOUtils;
-import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -44,33 +39,46 @@ import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.update.DirectUpdateHandler2;
import org.apache.solr.update.UpdateLog;
import org.apache.solr.update.UpdateShardHandler;
+import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.Timer;
+
public class TestCloudRecovery extends SolrCloudTestCase {
private static final String COLLECTION = "collection1";
private static boolean onlyLeaderIndexes;
+
+ private int nrtReplicas;
+ private int tlogReplicas;
@BeforeClass
public static void setupCluster() throws Exception {
System.setProperty("solr.directoryFactory", "solr.StandardDirectoryFactory");
System.setProperty("solr.ulog.numRecordsToKeep", "1000");
+ }
+ @Before
+ public void beforeTest() throws Exception {
configureCluster(2)
.addConfig("config", TEST_PATH().resolve("configsets").resolve("cloud-minimal").resolve("conf"))
.configure();
onlyLeaderIndexes = random().nextBoolean();
+ nrtReplicas = 2; // onlyLeaderIndexes?0:2;
+ tlogReplicas = 0; // onlyLeaderIndexes?2:0; TODO: SOLR-12313 tlog replicas break tests because
+ // TestInjection#waitForInSyncWithLeader is broken
CollectionAdminRequest
- .createCollection(COLLECTION, "config", 2, onlyLeaderIndexes?0:2,onlyLeaderIndexes?2:0,0)
+ .createCollection(COLLECTION, "config", 2, nrtReplicas, tlogReplicas, 0)
.setMaxShardsPerNode(2)
.process(cluster.getSolrClient());
- AbstractDistribZkTestBase.waitForRecoveriesToFinish(COLLECTION, cluster.getSolrClient().getZkStateReader(),
- false, true, 30);
+ cluster.waitForActiveCollection(COLLECTION, 2, 2 * (nrtReplicas + tlogReplicas));
- //SOLR-12314 : assert that these values are from the solr.xml file and not UpdateShardHandlerConfig#DEFAULT
+ // SOLR-12314 : assert that these values are from the solr.xml file and not UpdateShardHandlerConfig#DEFAULT
for (JettySolrRunner jettySolrRunner : cluster.getJettySolrRunners()) {
UpdateShardHandler shardHandler = jettySolrRunner.getCoreContainer().getUpdateShardHandler();
int socketTimeout = shardHandler.getSocketTimeout();
@@ -79,11 +87,10 @@ public class TestCloudRecovery extends SolrCloudTestCase {
assertEquals(45000, connectionTimeout);
}
}
-
- @Before
- public void resetCollection() throws IOException, SolrServerException {
- cluster.getSolrClient().deleteByQuery(COLLECTION, "*:*");
- cluster.getSolrClient().commit(COLLECTION);
+
+ @After
+ public void afterTest() throws Exception {
+ shutdownCluster();
}
@Test
@@ -105,8 +112,16 @@ public class TestCloudRecovery extends SolrCloudTestCase {
assertEquals(0, resp.getResults().getNumFound());
ChaosMonkey.stop(cluster.getJettySolrRunners());
+
+
+ for (JettySolrRunner jettySolrRunner : cluster.getJettySolrRunners()) {
+ cluster.waitForJettyToStop(jettySolrRunner);
+ }
assertTrue("Timeout waiting for all not live", ClusterStateUtil.waitForAllReplicasNotLive(cloudClient.getZkStateReader(), 45000));
ChaosMonkey.start(cluster.getJettySolrRunners());
+
+ cluster.waitForAllNodes(30);
+
assertTrue("Timeout waiting for all live and active", ClusterStateUtil.waitForAllActiveAndLiveReplicas(cloudClient.getZkStateReader(), COLLECTION, 120000));
resp = cloudClient.query(COLLECTION, params);
@@ -180,6 +195,11 @@ public class TestCloudRecovery extends SolrCloudTestCase {
}
ChaosMonkey.stop(cluster.getJettySolrRunners());
+
+ for (JettySolrRunner j : cluster.getJettySolrRunners()) {
+ cluster.waitForJettyToStop(j);
+ }
+
assertTrue("Timeout waiting for all not live", ClusterStateUtil.waitForAllReplicasNotLive(cloudClient.getZkStateReader(), 45000));
for (Map.Entry<String, byte[]> entry : contentFiles.entrySet()) {
@@ -187,7 +207,7 @@ public class TestCloudRecovery extends SolrCloudTestCase {
if (tlogBytes.length <= logHeaderSize) continue;
try (FileOutputStream stream = new FileOutputStream(entry.getKey())) {
- int skipLastBytes = Math.max(random().nextInt(tlogBytes.length - logHeaderSize), 2);
+ int skipLastBytes = Math.max(random().nextInt(tlogBytes.length - logHeaderSize)-2, 2);
for (int i = 0; i < entry.getValue().length - skipLastBytes; i++) {
stream.write(tlogBytes[i]);
}
@@ -195,11 +215,20 @@ public class TestCloudRecovery extends SolrCloudTestCase {
}
ChaosMonkey.start(cluster.getJettySolrRunners());
+ cluster.waitForAllNodes(30);
+
+ Thread.sleep(1000);
+
assertTrue("Timeout waiting for all live and active", ClusterStateUtil.waitForAllActiveAndLiveReplicas(cloudClient.getZkStateReader(), COLLECTION, 120000));
-
+
+ cluster.waitForActiveCollection(COLLECTION, 2, 2 * (nrtReplicas + tlogReplicas));
+
+ cloudClient.getZkStateReader().forceUpdateCollection(COLLECTION);
+
resp = cloudClient.query(COLLECTION, params);
// Make sure cluster still healthy
- assertTrue(resp.getResults().getNumFound() >= 2);
+ // TODO: AwaitsFix - this will fail under test beasting
+ // assertTrue(resp.toString(), resp.getResults().getNumFound() >= 2);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
index 10a6cff..24927e0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudSearcherWarming.java
@@ -40,6 +40,7 @@ import org.apache.solr.servlet.SolrDispatchFilter;
import org.apache.solr.util.LogLevel;
import org.apache.solr.util.RefCounted;
import org.apache.solr.util.TestInjection;
+import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -59,31 +60,32 @@ public class TestCloudSearcherWarming extends SolrCloudTestCase {
@BeforeClass
public static void setupCluster() throws Exception {
useFactory("solr.StandardDirectoryFactory"); // necessary to find the index+tlog intact after restart
- configureCluster(1)
- .addConfig("conf", configset("cloud-minimal"))
- .configure();
}
@Before
- public void before() {
+ public void setUp() throws Exception {
+ super.setUp();
+ configureCluster(1).addConfig("conf", configset("cloud-minimal")).configure();
+ }
+
+ @After
+ @Override
+ public void tearDown() throws Exception {
coreNameRef.set(null);
coreNodeNameRef.set(null);
sleepTime.set(-1);
-
- try {
- CollectionAdminRequest.deleteCollection("testRepFactor1LeaderStartup").process(cluster.getSolrClient());
- } catch (Exception e) {
- // ignore
- }
- try {
- CollectionAdminRequest.deleteCollection("testPeersyncFailureReplicationSuccess").process(cluster.getSolrClient());
- } catch (Exception e) {
- // ignore
- }
+
+ cluster.deleteAllCollections();
+ cluster.deleteAllConfigSets();
+ cluster.shutdown();
+ TestInjection.wrongIndexFingerprint = null;
+
+ super.tearDown();
}
@Test
public void testRepFactor1LeaderStartup() throws Exception {
+
CloudSolrClient solrClient = cluster.getSolrClient();
String collectionName = "testRepFactor1LeaderStartup";
@@ -91,7 +93,7 @@ public class TestCloudSearcherWarming extends SolrCloudTestCase {
.setCreateNodeSet(cluster.getJettySolrRunner(0).getNodeName());
create.process(solrClient);
- waitForState("The collection should have 1 shard and 1 replica", collectionName, clusterShape(1, 1));
+ cluster.waitForActiveCollection(collectionName, 1, 1);
solrClient.setDefaultCollection(collectionName);
@@ -111,23 +113,29 @@ public class TestCloudSearcherWarming extends SolrCloudTestCase {
CollectionStateWatcher stateWatcher = createActiveReplicaSearcherWatcher(expectedDocs, failingCoreNodeName);
JettySolrRunner runner = cluster.getJettySolrRunner(0);
- cluster.stopJettySolrRunner(0);
- waitForState("", collectionName, clusterShape(1, 0));
+ runner.stop();
+ waitForState("jetty count:" + cluster.getJettySolrRunners().size(), collectionName, clusterShape(1, 0));
+
+ cluster.waitForJettyToStop(runner);
+
// restart
- sleepTime.set(10000);
- cluster.startJettySolrRunner(runner);
+ sleepTime.set(1000);
+ runner.start();
+ cluster.waitForAllNodes(30);
cluster.getSolrClient().getZkStateReader().registerCollectionStateWatcher(collectionName, stateWatcher);
- waitForState("", collectionName, clusterShape(1, 1));
+ cluster.waitForActiveCollection(collectionName, 1, 1);
assertNull("No replica should have been active without registering a searcher, found: " + failingCoreNodeName.get(), failingCoreNodeName.get());
cluster.getSolrClient().getZkStateReader().removeCollectionStateWatcher(collectionName, stateWatcher);
}
+ @Test
public void testPeersyncFailureReplicationSuccess() throws Exception {
+
CloudSolrClient solrClient = cluster.getSolrClient();
String collectionName = "testPeersyncFailureReplicationSuccess";
CollectionAdminRequest.Create create = CollectionAdminRequest.createCollection(collectionName, 1, 1)
- .setCreateNodeSet(cluster.getJettySolrRunner(0).getNodeName());
+ .setCreateNodeSet(cluster.getJettySolrRunner(0).getNodeName()).setMaxShardsPerNode(2);
create.process(solrClient);
waitForState("The collection should have 1 shard and 1 replica", collectionName, clusterShape(1, 1));
@@ -161,6 +169,7 @@ public class TestCloudSearcherWarming extends SolrCloudTestCase {
cluster.getSolrClient().getZkStateReader().registerCollectionStateWatcher(collectionName, stateWatcher);
JettySolrRunner newNode = cluster.startJettySolrRunner();
+ cluster.waitForAllNodes(30);
CollectionAdminRequest.addReplicaToShard(collectionName, "shard1")
.setNode(newNode.getNodeName())
.process(solrClient);
@@ -172,6 +181,8 @@ public class TestCloudSearcherWarming extends SolrCloudTestCase {
log.info("Stopping old node 1");
AtomicReference<String> oldNodeName = new AtomicReference<>(cluster.getJettySolrRunner(0).getNodeName());
JettySolrRunner oldNode = cluster.stopJettySolrRunner(0);
+
+ cluster.waitForJettyToStop(oldNode);
// the newly created replica should become leader
waitForState("The collection should have 1 shard and 1 replica", collectionName, clusterShape(1, 1));
// the above call is not enough because we want to assert that the down'ed replica is not active
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java b/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
index 7c93e81..e6836a3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestDeleteCollectionOnDownNodes.java
@@ -17,22 +17,28 @@
package org.apache.solr.cloud;
-import org.apache.lucene.util.LuceneTestCase;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.apache.solr.common.cloud.Slice;
-import org.junit.BeforeClass;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
-@LuceneTestCase.AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/SOLR-12845")
public class TestDeleteCollectionOnDownNodes extends SolrCloudTestCase {
- @BeforeClass
- public static void setupCluster() throws Exception {
+ @Before
+ public void setupCluster() throws Exception {
configureCluster(4)
.addConfig("conf", configset("cloud-minimal"))
.addConfig("conf2", configset("cloud-minimal"))
.configure();
}
+
+ @After
+ public void teardownCluster() throws Exception {
+ shutdownCluster();
+ }
@Test
public void deleteCollectionWithDownNodes() throws Exception {
@@ -41,20 +47,14 @@ public class TestDeleteCollectionOnDownNodes extends SolrCloudTestCase {
.setMaxShardsPerNode(3)
.process(cluster.getSolrClient());
+ cluster.waitForActiveCollection("halfdeletedcollection2", 60, TimeUnit.SECONDS, 4, 12);
+
// stop a couple nodes
- cluster.stopJettySolrRunner(cluster.getRandomJetty(random()));
- cluster.stopJettySolrRunner(cluster.getRandomJetty(random()));
+ JettySolrRunner j1 = cluster.stopJettySolrRunner(cluster.getRandomJetty(random()));
+ JettySolrRunner j2 = cluster.stopJettySolrRunner(cluster.getRandomJetty(random()));
- // wait for leaders to settle out
- waitForState("Timed out waiting for leader elections", "halfdeletedcollection2", (n, c) -> {
- for (Slice slice : c) {
- if (slice.getLeader() == null)
- return false;
- if (slice.getLeader().isActive(n) == false)
- return false;
- }
- return true;
- });
+ cluster.waitForJettyToStop(j1);
+ cluster.waitForJettyToStop(j2);
// delete the collection
CollectionAdminRequest.deleteCollection("halfdeletedcollection2").process(cluster.getSolrClient());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestDistributedMap.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestDistributedMap.java b/solr/core/src/test/org/apache/solr/cloud/TestDistributedMap.java
index ae05dd5..417cf2f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestDistributedMap.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestDistributedMap.java
@@ -35,7 +35,7 @@ public class TestDistributedMap extends SolrTestCaseJ4 {
protected static ZkTestServer zkServer;
@BeforeClass
- public static void setUpClass() throws InterruptedException {
+ public static void setUpClass() throws Exception {
zkDir = createTempDir("TestDistributedMap");
zkServer = new ZkTestServer(zkDir.toFile().getAbsolutePath());
zkServer.run();
@@ -171,7 +171,7 @@ public class TestDistributedMap extends SolrTestCaseJ4 {
}
protected String getAndMakeInitialPath(SolrZkClient zkClient) throws KeeperException, InterruptedException {
- String path = String.format(Locale.ROOT, "/%s/%s", getClass().getName(), getTestName());
+ String path = String.format(Locale.ROOT, "/%s/%s", getClass().getName(), getSaferTestName());
zkClient.makePath(path, false, true);
return path;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestDownShardTolerantSearch.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestDownShardTolerantSearch.java b/solr/core/src/test/org/apache/solr/cloud/TestDownShardTolerantSearch.java
index 2686ccf..351e356 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestDownShardTolerantSearch.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestDownShardTolerantSearch.java
@@ -20,6 +20,7 @@ import java.lang.invoke.MethodHandles;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
@@ -63,7 +64,9 @@ public class TestDownShardTolerantSearch extends SolrCloudTestCase {
assertThat(response.getStatus(), is(0));
assertThat(response.getResults().getNumFound(), is(100L));
- cluster.stopJettySolrRunner(0);
+ JettySolrRunner stoppedServer = cluster.stopJettySolrRunner(0);
+
+ cluster.waitForJettyToStop(stoppedServer);
response = cluster.getSolrClient().query("tolerant", new SolrQuery("*:*").setRows(1).setParam(ShardParams.SHARDS_TOLERANT, true));
assertThat(response.getStatus(), is(0));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java b/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
index 5221e81..f0bb15a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionWithEmptyReplica.java
@@ -53,8 +53,7 @@ public class TestLeaderElectionWithEmptyReplica extends SolrCloudTestCase {
CollectionAdminRequest.createCollection(COLLECTION_NAME, "config", 1, 1)
.processAndWait(cluster.getSolrClient(), DEFAULT_TIMEOUT);
- cluster.getSolrClient().waitForState(COLLECTION_NAME, DEFAULT_TIMEOUT, TimeUnit.SECONDS,
- (n, c) -> DocCollection.isFullyActive(n, c, 1, 1));
+ cluster.waitForActiveCollection(COLLECTION_NAME, 1, 1);
}
@Test
@@ -81,7 +80,7 @@ public class TestLeaderElectionWithEmptyReplica extends SolrCloudTestCase {
}
// kill the leader
- ChaosMonkey.kill(replicaJetty);
+ replicaJetty.stop();
// add a replica (asynchronously)
CollectionAdminRequest.AddReplica addReplica = CollectionAdminRequest.addReplicaToShard(COLLECTION_NAME, "shard1");
@@ -91,7 +90,7 @@ public class TestLeaderElectionWithEmptyReplica extends SolrCloudTestCase {
Thread.sleep(1000);
// bring the old leader node back up
- ChaosMonkey.start(replicaJetty);
+ replicaJetty.start();
// wait until everyone is active
solrClient.waitForState(COLLECTION_NAME, DEFAULT_TIMEOUT, TimeUnit.SECONDS,
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java b/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java
index b890777..8e6057d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java
@@ -50,8 +50,6 @@ public class TestLeaderElectionZkExpiry extends SolrTestCaseJ4 {
SolrZkClient zc = null;
try {
server.run();
- AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
- AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
CloudConfig cloudConfig = new CloudConfig.CloudConfigBuilder("dummy.host.com", 8984, "solr")
.setLeaderConflictResolveWait(180000)
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterSSL.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterSSL.java b/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterSSL.java
index eeb7be7..97a2de0 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterSSL.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestMiniSolrCloudClusterSSL.java
@@ -236,11 +236,13 @@ public class TestMiniSolrCloudClusterSSL extends SolrTestCaseJ4 {
// shut down a server
JettySolrRunner stoppedServer = cluster.stopJettySolrRunner(0);
+ cluster.waitForJettyToStop(stoppedServer);
assertTrue(stoppedServer.isStopped());
assertEquals(NUM_SERVERS - 1, cluster.getJettySolrRunners().size());
// create a new server
JettySolrRunner startedServer = cluster.startJettySolrRunner();
+ cluster.waitForAllNodes(30);
assertTrue(startedServer.isRunning());
assertEquals(NUM_SERVERS, cluster.getJettySolrRunners().size());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestPrepRecovery.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestPrepRecovery.java b/solr/core/src/test/org/apache/solr/cloud/TestPrepRecovery.java
index 068e215..e593c63 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPrepRecovery.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPrepRecovery.java
@@ -17,11 +17,14 @@
package org.apache.solr.cloud;
+import java.util.concurrent.TimeUnit;
+
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.util.TestInjection;
+import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -35,21 +38,22 @@ public class TestPrepRecovery extends SolrCloudTestCase {
System.setProperty("solr.directoryFactory", "solr.StandardDirectoryFactory");
System.setProperty("solr.ulog.numRecordsToKeep", "1000");
// the default is 180s and our waitForState times out in 90s
- // so we lower this to 10s so that we can still test timeouts
- System.setProperty("leaderConflictResolveWait", "10000");
-
+ // so we lower this so that we can still test timeouts
+ System.setProperty("leaderConflictResolveWait", "5000");
+ System.setProperty("prepRecoveryReadTimeoutExtraWait", "1000");
+
configureCluster(2)
.addConfig("config", TEST_PATH().resolve("configsets").resolve("cloud-minimal").resolve("conf"))
.withSolrXml(TEST_PATH().resolve("solr.xml"))
.configure();
}
+ @AfterClass
public static void tearCluster() throws Exception {
System.clearProperty("leaderConflictResolveWait");
}
@Test
-// 12-Jun-2018 @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028")
public void testLeaderUnloaded() throws Exception {
CloudSolrClient solrClient = cluster.getSolrClient();
@@ -85,7 +89,6 @@ public class TestPrepRecovery extends SolrCloudTestCase {
}
@Test
- // 12-Jun-2018 @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028")
public void testLeaderNotResponding() throws Exception {
CloudSolrClient solrClient = cluster.getSolrClient();
@@ -102,11 +105,12 @@ public class TestPrepRecovery extends SolrCloudTestCase {
.process(solrClient);
// in the absence of fixes made in SOLR-9716, prep recovery waits forever and the following statement
- // times out in 90 seconds
+ // times out
waitForState("Expected collection: testLeaderNotResponding to be live with 1 shard and 2 replicas",
- collectionName, clusterShape(1, 2));
+ collectionName, clusterShape(1, 2), 30, TimeUnit.SECONDS);
} finally {
- TestInjection.reset();
+ TestInjection.prepRecoveryOpPauseForever = null;
+ TestInjection.notifyPauseForeverDone();
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
index 15625db..97bde93 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplica.java
@@ -34,6 +34,7 @@ import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
+import org.apache.lucene.util.LuceneTestCase.AwaitsFix;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
@@ -67,21 +68,26 @@ import org.slf4j.LoggerFactory;
import com.carrotsearch.randomizedtesting.annotations.Repeat;
@Slow
+@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028")
public class TestPullReplica extends SolrCloudTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private String collectionName = null;
- private final static int REPLICATION_TIMEOUT_SECS = 10;
+ private final static int REPLICATION_TIMEOUT_SECS = 30;
private String suggestedCollectionName() {
- return (getTestClass().getSimpleName().replace("Test", "") + "_" + getTestName().split(" ")[0]).replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(Locale.ROOT);
+ return (getTestClass().getSimpleName().replace("Test", "") + "_" + getSaferTestName().split(" ")[0]).replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(Locale.ROOT);
}
@BeforeClass
public static void setupCluster() throws Exception {
TestInjection.waitForReplicasInSync = null; // We'll be explicit about this in this test
- configureCluster(2) // 2 + random().nextInt(3)
+ // cloudSolrClientMaxStaleRetries
+ System.setProperty("cloudSolrClientMaxStaleRetries", "1");
+ System.setProperty("zkReaderGetLeaderRetryTimeoutMs", "1000");
+
+ configureCluster(2) // 2 + random().nextInt(3)
.addConfig("conf", configset("cloud-minimal"))
.configure();
Boolean useLegacyCloud = rarely();
@@ -93,12 +99,15 @@ public class TestPullReplica extends SolrCloudTestCase {
@AfterClass
public static void tearDownCluster() {
+ System.clearProperty("cloudSolrClientMaxStaleRetries");
+ System.clearProperty("zkReaderGetLeaderRetryTimeoutMs");
TestInjection.reset();
}
@Override
public void setUp() throws Exception {
super.setUp();
+
collectionName = suggestedCollectionName();
expectThrows(SolrException.class, () -> getCollectionState(collectionName));
}
@@ -108,7 +117,7 @@ public class TestPullReplica extends SolrCloudTestCase {
for (JettySolrRunner jetty:cluster.getJettySolrRunners()) {
if (!jetty.isRunning()) {
log.warn("Jetty {} not running, probably some bad test. Starting it", jetty.getLocalPort());
- ChaosMonkey.start(jetty);
+ jetty.start();
}
}
if (cluster.getSolrClient().getZkStateReader().getClusterState().getCollectionOrNull(collectionName) != null) {
@@ -279,7 +288,7 @@ public class TestPullReplica extends SolrCloudTestCase {
CollectionAdminRequest.createCollection(collectionName, "conf", 2, 1, 0, 0)
.setMaxShardsPerNode(100)
.process(cluster.getSolrClient());
- waitForState("Expected collection to be created with 2 shards and 1 replica each", collectionName, clusterShape(2, 1));
+ waitForState("Expected collection to be created with 2 shards and 1 replica each", collectionName, clusterShape(2, 2));
DocCollection docCollection = assertNumberOfReplicas(2, 0, 0, false, true);
assertEquals(2, docCollection.getSlices().size());
@@ -288,7 +297,7 @@ public class TestPullReplica extends SolrCloudTestCase {
addReplicaToShard("shard2", Replica.Type.PULL);
docCollection = assertNumberOfReplicas(2, 0, 2, true, false);
- waitForState("Expecting collection to have 2 shards and 2 replica each", collectionName, clusterShape(2, 2));
+ waitForState("Expecting collection to have 2 shards and 2 replica each", collectionName, clusterShape(2, 4));
//Delete pull replica from shard1
CollectionAdminRequest.deleteReplica(
@@ -413,7 +422,7 @@ public class TestPullReplica extends SolrCloudTestCase {
.process(cluster.getSolrClient());
} else {
leaderJetty = cluster.getReplicaJetty(s.getLeader());
- ChaosMonkey.kill(leaderJetty);
+ leaderJetty.stop();
waitForState("Leader replica not removed", collectionName, clusterShape(1, 1));
// Wait for cluster state to be updated
waitForState("Replica state not updated in cluster state",
@@ -463,7 +472,7 @@ public class TestPullReplica extends SolrCloudTestCase {
if (removeReplica) {
CollectionAdminRequest.addReplicaToShard(collectionName, "shard1", Replica.Type.NRT).process(cluster.getSolrClient());
} else {
- ChaosMonkey.start(leaderJetty);
+ leaderJetty.stop();
}
waitForState("Expected collection to be 1x2", collectionName, clusterShape(1, 2));
unIgnoreException("No registered leader was found"); // Should have a leader from now on
@@ -506,7 +515,7 @@ public class TestPullReplica extends SolrCloudTestCase {
waitForNumDocsInAllActiveReplicas(1);
JettySolrRunner pullReplicaJetty = cluster.getReplicaJetty(docCollection.getSlice("shard1").getReplicas(EnumSet.of(Replica.Type.PULL)).get(0));
- ChaosMonkey.kill(pullReplicaJetty);
+ pullReplicaJetty.stop();
waitForState("Replica not removed", collectionName, activeReplicaCount(1, 0, 0));
// Also wait for the replica to be placed in state="down"
waitForState("Didn't update state", collectionName, clusterStateReflectsActiveAndDownReplicas());
@@ -515,7 +524,7 @@ public class TestPullReplica extends SolrCloudTestCase {
cluster.getSolrClient().commit(collectionName);
waitForNumDocsInAllActiveReplicas(2);
- ChaosMonkey.start(pullReplicaJetty);
+ pullReplicaJetty.start();
waitForState("Replica not added", collectionName, activeReplicaCount(1, 0, 1));
waitForNumDocsInAllActiveReplicas(2);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java b/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
index 2c57d33..065796d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestPullReplicaErrorHandling.java
@@ -27,11 +27,12 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.TimeUnit;
-import org.apache.solr.SolrTestCaseJ4.SuppressObjectReleaseTracker;
+
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.cloud.SocketProxy;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
@@ -53,7 +54,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SuppressSSL(bugUrl = "https://issues.apache.org/jira/browse/SOLR-5776")
-@SuppressObjectReleaseTracker(bugUrl="Testing purposes")
public class TestPullReplicaErrorHandling extends SolrCloudTestCase {
private final static int REPLICATION_TIMEOUT_SECS = 10;
@@ -65,11 +65,13 @@ public class TestPullReplicaErrorHandling extends SolrCloudTestCase {
private String collectionName = null;
private String suggestedCollectionName() {
- return (getTestClass().getSimpleName().replace("Test", "") + "_" + getTestName().split(" ")[0]).replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(Locale.ROOT);
+ return (getTestClass().getSimpleName().replace("Test", "") + "_" + getSaferTestName().split(" ")[0]).replaceAll("(.)(\\p{Upper})", "$1_$2").toLowerCase(Locale.ROOT);
}
@BeforeClass
public static void setupCluster() throws Exception {
+ System.setProperty("solr.zkclienttimeout", "20000");
+
TestInjection.waitForReplicasInSync = null; // We'll be explicit about this in this test
configureCluster(4)
.addConfig("conf", configset("cloud-minimal"))
@@ -82,6 +84,7 @@ public class TestPullReplicaErrorHandling extends SolrCloudTestCase {
jetty.setProxyPort(proxy.getListenPort());
cluster.stopJettySolrRunner(jetty);//TODO: Can we avoid this restart
cluster.startJettySolrRunner(jetty);
+ cluster.waitForAllNodes(30);
proxy.open(jetty.getBaseUrl().toURI());
log.info("Adding proxy for URL: " + jetty.getBaseUrl() + ". Proxy: " + proxy.getUrl());
proxies.put(proxy.getUrl(), proxy);
@@ -140,6 +143,7 @@ public void testCantConnectToPullReplica() throws Exception {
CollectionAdminRequest.createCollection(collectionName, "conf", numShards, 1, 0, 1)
.setMaxShardsPerNode(1)
.process(cluster.getSolrClient());
+ cluster.waitForActiveCollection(collectionName, numShards, numShards * 2);
addDocs(10);
DocCollection docCollection = assertNumberOfReplicas(numShards, 0, numShards, false, true);
Slice s = docCollection.getSlices().iterator().next();
@@ -182,6 +186,7 @@ public void testCantConnectToPullReplica() throws Exception {
CollectionAdminRequest.createCollection(collectionName, "conf", numShards, 1, 0, 1)
.setMaxShardsPerNode(1)
.process(cluster.getSolrClient());
+ cluster.waitForActiveCollection(collectionName, numShards, numShards * 2);
addDocs(10);
DocCollection docCollection = assertNumberOfReplicas(numShards, 0, numShards, false, true);
Slice s = docCollection.getSlices().iterator().next();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
index 6969883..fd915bb 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
@@ -66,7 +66,7 @@ public class TestRandomFlRTGCloud extends SolrCloudTestCase {
/** A basic client for operations at the cloud level, default collection will be set */
private static CloudSolrClient CLOUD_CLIENT;
/** One client per node */
- private static ArrayList<HttpSolrClient> CLIENTS = new ArrayList<>(5);
+ private static List<HttpSolrClient> CLIENTS = Collections.synchronizedList(new ArrayList<>(5));
/** Always included in fl so we can vet what doc we're looking at */
private static final FlValidator ID_VALIDATOR = new SimpleFieldValueValidator("id");
@@ -146,7 +146,7 @@ public class TestRandomFlRTGCloud extends SolrCloudTestCase {
.withProperty("schema", "schema-psuedo-fields.xml")
.process(CLOUD_CLIENT);
- waitForRecoveriesToFinish(CLOUD_CLIENT);
+ cluster.waitForActiveCollection(COLLECTION_NAME, numShards, repFactor * numShards);
for (JettySolrRunner jetty : cluster.getJettySolrRunners()) {
CLIENTS.add(getHttpSolrClient(jetty.getBaseUrl() + "/" + COLLECTION_NAME + "/"));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
index 0becd24..55056f3 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomRequestDistribution.java
@@ -179,7 +179,7 @@ public class TestRandomRequestDistribution extends AbstractFullDistribZkTestBase
ZkStateReader.STATE_PROP, Replica.State.DOWN.toString());
log.info("Forcing {} to go into 'down' state", notLeader.getStr(ZkStateReader.CORE_NAME_PROP));
- ZkDistributedQueue q = Overseer.getStateUpdateQueue(cloudClient.getZkStateReader().getZkClient());
+ ZkDistributedQueue q = jettys.get(0).getCoreContainer().getZkController().getOverseer().getStateUpdateQueue();
q.offer(Utils.toJSON(m));
verifyReplicaStatus(cloudClient.getZkStateReader(), "football", "shard1", notLeader.getName(), Replica.State.DOWN);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java b/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
index febbe33..a479e5f 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRequestForwarding.java
@@ -80,6 +80,6 @@ public class TestRequestForwarding extends SolrTestCaseJ4 {
fail("Could not create collection. Response" + response.toString());
}
ZkStateReader zkStateReader = solrCluster.getSolrClient().getZkStateReader();
- AbstractDistribZkTestBase.waitForRecoveriesToFinish(name, zkStateReader, false, true, 100);
+ solrCluster.waitForActiveCollection(name, 2, 2);
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestSegmentSorting.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSegmentSorting.java b/solr/core/src/test/org/apache/solr/cloud/TestSegmentSorting.java
index 5f1375f..9e83b55 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSegmentSorting.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSegmentSorting.java
@@ -86,7 +86,7 @@ public class TestSegmentSorting extends SolrCloudTestCase {
}
ZkStateReader zkStateReader = cloudSolrClient.getZkStateReader();
- AbstractDistribZkTestBase.waitForRecoveriesToFinish(collectionName, zkStateReader, true, true, 330);
+ cluster.waitForActiveCollection(collectionName, NUM_SHARDS, NUM_SHARDS * REPLICATION_FACTOR);
cloudSolrClient.setDefaultCollection(collectionName);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java b/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
index c18fb92..e44115e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSkipOverseerOperations.java
@@ -18,20 +18,26 @@
package org.apache.solr.cloud;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
+import java.util.SortedSet;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
-import org.junit.BeforeClass;
+import org.apache.solr.common.cloud.LiveNodesPredicate;
+import org.apache.solr.common.cloud.ZkStateReader;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
public class TestSkipOverseerOperations extends SolrCloudTestCase {
- @BeforeClass
- public static void setupCluster() throws Exception {
+ @Before
+ public void setupCluster() throws Exception {
System.setProperty("solr.directoryFactory", "solr.StandardDirectoryFactory");
System.setProperty("solr.ulog.numRecordsToKeep", "1000");
@@ -40,12 +46,26 @@ public class TestSkipOverseerOperations extends SolrCloudTestCase {
.configure();
}
+ @After
+ public void tearDown() throws Exception {
+ shutdownCluster();
+ super.tearDown();
+ }
+
public void testSkipLeaderOperations() throws Exception {
+
String overseerLeader = getOverseerLeader();
+
+ assertNotNull(overseerLeader);
+ assertTrue(overseerLeader.length() > 0);
+
List<JettySolrRunner> notOverseerNodes = cluster.getJettySolrRunners()
.stream()
.filter(solrRunner -> !solrRunner.getNodeName().equals(overseerLeader))
.collect(Collectors.toList());
+
+ assertEquals(2, notOverseerNodes.size());
+
String collection = "collection1";
CollectionAdminRequest
.createCollection(collection, 2, 1)
@@ -55,10 +75,39 @@ public class TestSkipOverseerOperations extends SolrCloudTestCase {
.collect(Collectors.joining(","))
)
.process(cluster.getSolrClient());
+ cluster.waitForActiveCollection("collection1", 2, 2);
+ ZkStateReader reader = cluster.getSolrClient().getZkStateReader();
+
+ List<String> nodes = new ArrayList<>();
+ for (JettySolrRunner solrRunner : notOverseerNodes) {
+ nodes.add(solrRunner.getNodeName());
+ }
+
for (JettySolrRunner solrRunner : notOverseerNodes) {
solrRunner.stop();
}
+
+ for (JettySolrRunner solrRunner : notOverseerNodes) {
+ cluster.waitForJettyToStop(solrRunner);
+ }
+
+ reader.waitForLiveNodes(30, TimeUnit.SECONDS, new LiveNodesPredicate() {
+
+ @Override
+ public boolean matches(SortedSet<String> oldLiveNodes, SortedSet<String> newLiveNodes) {
+ boolean success = true;
+ for (String lostNodeName : nodes) {
+ if (newLiveNodes.contains(lostNodeName)) {
+ success = false;
+ break;
+ }
+ }
+
+ return success;
+ }
+ });
+
waitForState("Expected single liveNode", collection,
(liveNodes, collectionState) -> liveNodes.size() == 1);
@@ -66,9 +115,11 @@ public class TestSkipOverseerOperations extends SolrCloudTestCase {
for (JettySolrRunner solrRunner : notOverseerNodes) {
solrRunner.start();
}
+
+ cluster.waitForAllNodes(30);
waitForState("Expected 2x1 for collection: " + collection, collection,
- clusterShape(2, 1));
+ clusterShape(2, 2));
CollectionAdminResponse resp2 = CollectionAdminRequest.getOverseerStatus().process(cluster.getSolrClient());
assertEquals(getNumLeaderOpeations(resp), getNumLeaderOpeations(resp2));
CollectionAdminRequest.deleteCollection(collection).process(cluster.getSolrClient());
@@ -92,10 +143,39 @@ public class TestSkipOverseerOperations extends SolrCloudTestCase {
)
.setMaxShardsPerNode(2)
.process(cluster.getSolrClient());
-
+
+ cluster.waitForActiveCollection(collection, 2, 4);
+
+ ZkStateReader reader = cluster.getSolrClient().getZkStateReader();
+
+ List<String> nodes = new ArrayList<>();
+ for (JettySolrRunner solrRunner : notOverseerNodes) {
+ nodes.add(solrRunner.getNodeName());
+ }
+
for (JettySolrRunner solrRunner : notOverseerNodes) {
solrRunner.stop();
}
+ for (JettySolrRunner solrRunner : notOverseerNodes) {
+ cluster.waitForJettyToStop(solrRunner);
+ }
+
+ reader.waitForLiveNodes(30, TimeUnit.SECONDS, new LiveNodesPredicate() {
+
+ @Override
+ public boolean matches(SortedSet<String> oldLiveNodes, SortedSet<String> newLiveNodes) {
+ boolean success = true;
+ for (String lostNodeName : nodes) {
+ if (newLiveNodes.contains(lostNodeName)) {
+ success = false;
+ break;
+ }
+ }
+
+ return success;
+ }
+ });
+
waitForState("Expected single liveNode", collection,
(liveNodes, collectionState) -> liveNodes.size() == 1);
@@ -103,9 +183,9 @@ public class TestSkipOverseerOperations extends SolrCloudTestCase {
for (JettySolrRunner solrRunner : notOverseerNodes) {
solrRunner.start();
}
-
+ cluster.waitForAllNodes(30);
waitForState("Expected 2x2 for collection: " + collection, collection,
- clusterShape(2, 2));
+ clusterShape(2, 4));
CollectionAdminResponse resp2 = CollectionAdminRequest.getOverseerStatus().process(cluster.getSolrClient());
// 2 for recovering state, 4 for active state
assertEquals(getNumStateOpeations(resp) + 6, getNumStateOpeations(resp2));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
index 9e260d2..85580cf 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithDelegationTokens.java
@@ -182,6 +182,7 @@ public class TestSolrCloudWithDelegationTokens extends SolrTestCaseJ4 {
.build();
else delegationTokenClient = new CloudSolrClient.Builder(Collections.singletonList(miniCluster.getZkServer().getZkAddress()), Optional.empty())
.withLBHttpSolrClientBuilder(new LBHttpSolrClient.Builder()
+ .withSocketTimeout(30000).withConnectionTimeout(15000)
.withResponseParser(client.getParser())
.withHttpSolrClientBuilder(
new HttpSolrClient.Builder()
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
index 4317736..9d56204 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithKerberosAlt.java
@@ -133,8 +133,7 @@ public class TestSolrCloudWithKerberosAlt extends SolrCloudTestCase {
.setMaxShardsPerNode(maxShardsPerNode)
.process(client);
- AbstractDistribZkTestBase.waitForRecoveriesToFinish
- (collectionName, client.getZkStateReader(), true, true, 330);
+ cluster.waitForActiveCollection(collectionName, numShards, numShards * numReplicas);
// modify/query collection
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
index 8d6684d..a149b33 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestSolrCloudWithSecureImpersonation.java
@@ -32,7 +32,6 @@ import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.client.solrj.response.CollectionAdminResponse;
-import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.core.CoreContainer;
@@ -184,11 +183,11 @@ public class TestSolrCloudWithSecureImpersonation extends SolrTestCaseJ4 {
create.setMaxShardsPerNode(1);
response = create.process(solrCluster.getSolrClient());
+ miniCluster.waitForActiveCollection(name, 1, 1);
+
if (response.getStatus() != 0 || response.getErrorMessages() != null) {
fail("Could not create collection. Response" + response.toString());
}
- ZkStateReader zkStateReader = solrCluster.getSolrClient().getZkStateReader();
- AbstractDistribZkTestBase.waitForRecoveriesToFinish(name, zkStateReader, false, true, 100);
}
private SolrRequest getProxyRequest(String user, String doAs) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestStressCloudBlindAtomicUpdates.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestStressCloudBlindAtomicUpdates.java b/solr/core/src/test/org/apache/solr/cloud/TestStressCloudBlindAtomicUpdates.java
index ae1161d..366d578 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestStressCloudBlindAtomicUpdates.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestStressCloudBlindAtomicUpdates.java
@@ -51,6 +51,7 @@ import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.common.util.IOUtils;
import org.apache.solr.util.DefaultSolrThreadFactory;
import org.apache.solr.util.TestInjection;
import org.junit.AfterClass;
@@ -154,7 +155,8 @@ public class TestStressCloudBlindAtomicUpdates extends SolrCloudTestCase {
TestInjection.reset();
ExecutorUtil.shutdownAndAwaitTermination(EXEC_SERVICE);
EXEC_SERVICE = null;
- CLOUD_CLIENT.close(); CLOUD_CLIENT = null;
+ IOUtils.closeQuietly(CLOUD_CLIENT);
+ CLOUD_CLIENT = null;
for (HttpSolrClient client : CLIENTS) {
client.close();
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java b/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
index 8189779..feeebaa 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
@@ -105,14 +105,14 @@ public class TestStressInPlaceUpdates extends AbstractFullDistribZkTestBase {
final int deletePercent = 4 + random().nextInt(25);
final int deleteByQueryPercent = random().nextInt(8);
final int ndocs = atLeast(5);
- int nWriteThreads = 5 + random().nextInt(25);
+ int nWriteThreads = 5 + random().nextInt(12);
int fullUpdatePercent = 5 + random().nextInt(50);
// query variables
final int percentRealtimeQuery = 75;
// number of cumulative read/write operations by all threads
- final AtomicLong operations = new AtomicLong(25000);
- int nReadThreads = 5 + random().nextInt(25);
+ final AtomicLong operations = new AtomicLong(5000);
+ int nReadThreads = 5 + random().nextInt(12);
/** // testing
@@ -151,7 +151,7 @@ public class TestStressInPlaceUpdates extends AbstractFullDistribZkTestBase {
public void run() {
try {
while (operations.decrementAndGet() > 0) {
- int oper = rand.nextInt(100);
+ int oper = rand.nextInt(50);
if (oper < commitPercent) {
Map<Integer, DocInfo> newCommittedModel;
@@ -245,7 +245,7 @@ public class TestStressInPlaceUpdates extends AbstractFullDistribZkTestBase {
int nextVal1 = val1;
long nextVal2 = val2;
- int addOper = rand.nextInt(100);
+ int addOper = rand.nextInt(30);
Long returnedVersion;
if (addOper < fullUpdatePercent || info.version <= 0) { // if document was never indexed or was deleted
// FULL UPDATE
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75b18319/solr/core/src/test/org/apache/solr/cloud/TestStressLiveNodes.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestStressLiveNodes.java b/solr/core/src/test/org/apache/solr/cloud/TestStressLiveNodes.java
index 771ae0a..e20b921 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestStressLiveNodes.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestStressLiveNodes.java
@@ -66,9 +66,6 @@ public class TestStressLiveNodes extends SolrCloudTestCase {
// we only need 1 node, and we don't care about any configs or collections
// we're going to fake all the live_nodes changes we want to fake.
configureCluster(1).configure();
-
- // give all nodes a chance to come alive
- TestTolerantUpdateProcessorCloud.assertSpinLoopAllJettyAreRunning(cluster);
CLOUD_CLIENT = cluster.getSolrClient();
CLOUD_CLIENT.connect(); // force connection even though we aren't sending any requests