mirror of
https://github.com/apache/lucene.git
synced 2025-02-13 05:25:50 +00:00
SOLR-10193: Improve MiniSolrCloudCluster#shutdown.
This commit is contained in:
parent
d6337ac3e5
commit
29a5ea44a7
@ -36,7 +36,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import org.apache.solr.client.solrj.embedded.JettyConfig;
|
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.ZkConfigManager;
|
||||||
import org.apache.solr.common.cloud.ZkStateReader;
|
import org.apache.solr.common.cloud.ZkStateReader;
|
||||||
import org.apache.solr.common.util.ExecutorUtil;
|
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.common.util.SolrjNamedThreadFactory;
|
||||||
import org.apache.solr.core.CoreContainer;
|
import org.apache.solr.core.CoreContainer;
|
||||||
import org.apache.zookeeper.KeeperException;
|
import org.apache.zookeeper.KeeperException;
|
||||||
@ -97,7 +97,8 @@ public class MiniSolrCloudCluster {
|
|||||||
private final CloudSolrClient solrClient;
|
private final CloudSolrClient solrClient;
|
||||||
private final JettyConfig jettyConfig;
|
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();
|
private final AtomicInteger nodeIds = new AtomicInteger();
|
||||||
|
|
||||||
@ -239,7 +240,7 @@ public class MiniSolrCloudCluster {
|
|||||||
startups.add(() -> startJettySolrRunner(newNodeName(), jettyConfig.context, jettyConfig));
|
startups.add(() -> startJettySolrRunner(newNodeName(), jettyConfig.context, jettyConfig));
|
||||||
}
|
}
|
||||||
|
|
||||||
Collection<Future<JettySolrRunner>> futures = executor.invokeAll(startups);
|
Collection<Future<JettySolrRunner>> futures = executorLauncher.invokeAll(startups);
|
||||||
Exception startupError = checkForExceptions("Error starting up MiniSolrCloudCluster", futures);
|
Exception startupError = checkForExceptions("Error starting up MiniSolrCloudCluster", futures);
|
||||||
if (startupError != null) {
|
if (startupError != null) {
|
||||||
try {
|
try {
|
||||||
@ -443,21 +444,23 @@ public class MiniSolrCloudCluster {
|
|||||||
*/
|
*/
|
||||||
public void shutdown() throws Exception {
|
public void shutdown() throws Exception {
|
||||||
try {
|
try {
|
||||||
if (solrClient != null)
|
|
||||||
solrClient.close();
|
IOUtils.closeQuietly(solrClient);
|
||||||
|
// accept no new tasks
|
||||||
|
executorLauncher.shutdown();
|
||||||
List<Callable<JettySolrRunner>> shutdowns = new ArrayList<>(jettys.size());
|
List<Callable<JettySolrRunner>> shutdowns = new ArrayList<>(jettys.size());
|
||||||
for (final JettySolrRunner jetty : jettys) {
|
for (final JettySolrRunner jetty : jettys) {
|
||||||
shutdowns.add(() -> stopJettySolrRunner(jetty));
|
shutdowns.add(() -> stopJettySolrRunner(jetty));
|
||||||
}
|
}
|
||||||
jettys.clear();
|
jettys.clear();
|
||||||
Collection<Future<JettySolrRunner>> futures = executor.invokeAll(shutdowns);
|
Collection<Future<JettySolrRunner>> futures = executorCloser.invokeAll(shutdowns);
|
||||||
Exception shutdownError = checkForExceptions("Error shutting down MiniSolrCloudCluster", futures);
|
Exception shutdownError = checkForExceptions("Error shutting down MiniSolrCloudCluster", futures);
|
||||||
if (shutdownError != null) {
|
if (shutdownError != null) {
|
||||||
throw shutdownError;
|
throw shutdownError;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
executor.shutdown();
|
ExecutorUtil.shutdownAndAwaitTermination(executorLauncher);
|
||||||
executor.awaitTermination(15, TimeUnit.SECONDS);
|
ExecutorUtil.shutdownAndAwaitTermination(executorCloser);
|
||||||
try {
|
try {
|
||||||
if (!externalZkServer) {
|
if (!externalZkServer) {
|
||||||
zkServer.shutdown();
|
zkServer.shutdown();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user