This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new b148c4041ab Refactor: remove coreContainerWorkExecutor (#3405)
b148c4041ab is described below
commit b148c4041abcbef033cf0a6e79b9f3a0ef307da6
Author: David Smiley <[email protected]>
AuthorDate: Mon Jun 30 10:47:06 2025 -0400
Refactor: remove coreContainerWorkExecutor (#3405)
It's only used for one silly thing:
It's needless to create an executor just to asynchronously wait for another
executor (coreLoadExecutor) to close. We can instead call
shutdownAndAwaitTermination on coreLoadExecutor when the container shuts down.
---
.../java/org/apache/solr/core/CoreContainer.java | 26 +++++-----------------
.../solr/handler/admin/MetricsHandlerTest.java | 6 ++---
2 files changed, 8 insertions(+), 24 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 35881ec9121..c7b19368e56 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -245,9 +245,7 @@ public class CoreContainer {
private volatile HttpSolrClientProvider solrClientProvider;
- private volatile ExecutorService coreContainerWorkExecutor =
- ExecutorUtil.newMDCAwareCachedThreadPool(
- new SolrNamedThreadFactory("coreContainerWorkExecutor"));
+ private volatile ExecutorService coreLoadExecutor;
private final OrderedExecutor<BytesRef> replayUpdatesExecutor;
@@ -839,16 +837,6 @@ public class CoreContainer {
tracer = TracerConfigurator.loadTracer(loader,
cfg.getTracerConfiguratorPluginInfo());
- coreContainerWorkExecutor =
- MetricUtils.instrumentedExecutorService(
- coreContainerWorkExecutor,
- null,
-
metricManager.registry(SolrMetricManager.getRegistryName(SolrInfoBean.Group.node)),
- SolrMetricManager.mkName(
- "coreContainerWorkExecutor",
- SolrInfoBean.Category.CONTAINER.toString(),
- "threadPool"));
-
shardHandlerFactory =
ShardHandlerFactory.newInstance(cfg.getShardHandlerFactoryPluginInfo(), loader);
if (shardHandlerFactory instanceof SolrMetricProducer metricProducer) {
@@ -1098,7 +1086,7 @@ public class CoreContainer {
}
// setup executor to load cores in parallel
- ExecutorService coreLoadExecutor =
+ coreLoadExecutor =
MetricUtils.instrumentedExecutorService(
ExecutorUtil.newMDCAwareFixedThreadPool(
cfg.getCoreLoadThreadCount(isZooKeeperAware()),
@@ -1168,11 +1156,9 @@ public class CoreContainer {
backgroundCloser.start();
} finally {
- if (asyncSolrCoreLoad) {
- coreContainerWorkExecutor.execute(
- () ->
ExecutorUtil.shutdownAndAwaitTerminationForever(coreLoadExecutor));
- } else {
- ExecutorUtil.shutdownAndAwaitTerminationForever(coreLoadExecutor);
+ coreLoadExecutor.shutdown(); // doesn't block
+ if (!asyncSolrCoreLoad) {
+ ExecutorUtil.awaitTerminationForever(coreLoadExecutor);
}
}
@@ -1362,7 +1348,7 @@ public class CoreContainer {
zkSys.zkController.tryCancelAllElections();
}
- ExecutorUtil.shutdownAndAwaitTermination(coreContainerWorkExecutor);
+ ExecutorUtil.shutdownAndAwaitTermination(coreLoadExecutor); // actually
already shutdown
// First wake up the closer thread, it'll terminate almost immediately
since it checks
// isShutDown.
diff --git
a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
index 0bca48a204b..8eaf99bd01f 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java
@@ -276,9 +276,8 @@ public class MetricsHandlerTest extends SolrTestCaseJ4 {
assertEquals(1, values.size());
assertNotNull(values.get("solr.node"));
values = (NamedList<?>) values.get("solr.node");
- assertEquals(27, values.size());
+ assertEquals(15, values.size());
assertNotNull(values.get("CONTAINER.cores.lazy")); // this is a gauge node
-
assertNotNull(values.get("CONTAINER.threadPool.coreContainerWorkExecutor.completed"));
assertNotNull(values.get("CONTAINER.threadPool.coreLoadExecutor.completed"));
resp = new SolrQueryResponse();
@@ -300,8 +299,7 @@ public class MetricsHandlerTest extends SolrTestCaseJ4 {
values = (NamedList<?>) values.get("metrics");
assertNotNull(values.get("solr.node"));
values = (NamedList<?>) values.get("solr.node");
- assertEquals(7, values.size());
-
assertNotNull(values.get("CONTAINER.threadPool.coreContainerWorkExecutor.completed"));
+ assertEquals(5, values.size());
assertNotNull(values.get("CONTAINER.threadPool.coreLoadExecutor.completed"));
resp = new SolrQueryResponse();