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 2020/07/09 21:01:58 UTC

[lucene-solr] 16/23: fix init race.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 64ff0b6d15fc5ef14316dea7d6e6149d793d8562
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Wed Jul 8 13:46:14 2020 -0500

    fix init race.
---
 .../java/org/apache/solr/core/CoreContainer.java   | 43 +++++++++++-----------
 1 file changed, 21 insertions(+), 22 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 1754a58..f7ac939 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -225,7 +225,7 @@ public class CoreContainer implements Closeable {
 
   protected volatile SolrMetricsContext solrMetricsContext;
 
-  protected MetricsHandler metricsHandler;
+  protected volatile MetricsHandler metricsHandler;
 
   protected volatile MetricsHistoryHandler metricsHistoryHandler;
 
@@ -333,6 +333,26 @@ public class CoreContainer implements Closeable {
     this.containerProperties = new Properties(config.getSolrProperties());
     this.asyncSolrCoreLoad = asyncSolrCoreLoad;
     this.replayUpdatesExecutor = new OrderedExecutor(10, ParWork.getExecutorService(10, 10, 3));
+    metricManager = new SolrMetricManager(loader, cfg.getMetricsConfig());
+    String registryName = SolrMetricManager.getRegistryName(SolrInfoBean.Group.node);
+    solrMetricsContext = new SolrMetricsContext(metricManager, registryName, metricTag);
+    try (ParWork work = new ParWork(this)) {
+
+      work.collect(() -> {
+        shardHandlerFactory = ShardHandlerFactory.newInstance(cfg.getShardHandlerFactoryPluginInfo(), loader);
+        if (shardHandlerFactory instanceof SolrMetricProducer) {
+          SolrMetricProducer metricProducer = (SolrMetricProducer) shardHandlerFactory;
+          metricProducer.initializeMetrics(solrMetricsContext, "httpShardHandler");
+        }
+      });
+
+      work.collect(() -> {
+        updateShardHandler = new UpdateShardHandler(cfg.getUpdateShardHandlerConfig());
+        updateShardHandler.initializeMetrics(solrMetricsContext, "updateShardHandler");
+      });
+
+      work.addCollect("shard-handlers");
+    }
   }
 
   @SuppressWarnings({"unchecked"})
@@ -633,30 +653,9 @@ public class CoreContainer implements Closeable {
     containerHandlers.getApiBag().registerObject(packageStoreAPI.readAPI);
     containerHandlers.getApiBag().registerObject(packageStoreAPI.writeAPI);
 
-    metricManager = new SolrMetricManager(loader, cfg.getMetricsConfig());
-    String registryName = SolrMetricManager.getRegistryName(SolrInfoBean.Group.node);
-    solrMetricsContext = new SolrMetricsContext(metricManager, registryName, metricTag);
-
-
-
     try (ParWork work = new ParWork(this)) {
 
       work.collect(() -> {
-        shardHandlerFactory = ShardHandlerFactory.newInstance(cfg.getShardHandlerFactoryPluginInfo(), loader);
-        if (shardHandlerFactory instanceof SolrMetricProducer) {
-          SolrMetricProducer metricProducer = (SolrMetricProducer) shardHandlerFactory;
-          metricProducer.initializeMetrics(solrMetricsContext, "httpShardHandler");
-        }
-      });
-
-      work.collect(() -> {
-        updateShardHandler = new UpdateShardHandler(cfg.getUpdateShardHandlerConfig());
-        updateShardHandler.initializeMetrics(solrMetricsContext, "updateShardHandler");
-      });
-
-      work.addCollect("shard-handlers");
-
-      work.collect(() -> {
          zkSys.initZooKeeper(this, cfg.getCloudConfig());
       });