diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java index 7eb9b0d2e1e..e8a0c080472 100644 --- a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java +++ b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java @@ -36,7 +36,6 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.apache.solr.client.solrj.embedded.JettyConfig; @@ -50,6 +49,7 @@ import org.apache.solr.common.cloud.SolrZkClient; import org.apache.solr.common.cloud.ZkConfigManager; import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.util.ExecutorUtil; +import org.apache.solr.common.util.IOUtils; import org.apache.solr.common.util.SolrjNamedThreadFactory; import org.apache.solr.core.CoreContainer; import org.apache.zookeeper.KeeperException; @@ -97,8 +97,9 @@ public class MiniSolrCloudCluster { private final CloudSolrClient solrClient; private final JettyConfig jettyConfig; - private final ExecutorService executor = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrjNamedThreadFactory("jetty-launcher")); - + private final ExecutorService executorLauncher = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrjNamedThreadFactory("jetty-launcher")); + private final ExecutorService executorCloser = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrjNamedThreadFactory("jetty-closer")); + private final AtomicInteger nodeIds = new AtomicInteger(); /** @@ -239,7 +240,7 @@ public class MiniSolrCloudCluster { startups.add(() -> startJettySolrRunner(newNodeName(), jettyConfig.context, jettyConfig)); } - Collection> futures = executor.invokeAll(startups); + Collection> futures = executorLauncher.invokeAll(startups); Exception startupError = checkForExceptions("Error starting up MiniSolrCloudCluster", futures); if (startupError != null) { try { @@ -443,21 +444,23 @@ public class MiniSolrCloudCluster { */ public void shutdown() throws Exception { try { - if (solrClient != null) - solrClient.close(); + + IOUtils.closeQuietly(solrClient); + // accept no new tasks + executorLauncher.shutdown(); List> shutdowns = new ArrayList<>(jettys.size()); for (final JettySolrRunner jetty : jettys) { shutdowns.add(() -> stopJettySolrRunner(jetty)); } jettys.clear(); - Collection> futures = executor.invokeAll(shutdowns); + Collection> futures = executorCloser.invokeAll(shutdowns); Exception shutdownError = checkForExceptions("Error shutting down MiniSolrCloudCluster", futures); if (shutdownError != null) { throw shutdownError; } } finally { - executor.shutdown(); - executor.awaitTermination(15, TimeUnit.SECONDS); + ExecutorUtil.shutdownAndAwaitTermination(executorLauncher); + ExecutorUtil.shutdownAndAwaitTermination(executorCloser); try { if (!externalZkServer) { zkServer.shutdown();