You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/10/19 10:36:46 UTC

[39/50] [abbrv] lucene-solr:jira/solr-11320: SOLR-11389: For Solr(Shard|Cluster)Reporter instances the SolrMetricManager.registerReporter method is now called after the SolrCore or CoreContainer has been set for the instance.

SOLR-11389: For Solr(Shard|Cluster)Reporter instances the SolrMetricManager.registerReporter method is now called after the SolrCore or CoreContainer has been set for the instance.


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/0b0ed211
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/0b0ed211
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/0b0ed211

Branch: refs/heads/jira/solr-11320
Commit: 0b0ed2118277a5b22843faec259da5fefad2be53
Parents: 227b441
Author: Christine Poerschke <cp...@apache.org>
Authored: Wed Oct 18 16:27:04 2017 +0100
Committer: Christine Poerschke <cp...@apache.org>
Committed: Wed Oct 18 16:27:04 2017 +0100

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  4 ++
 .../org/apache/solr/core/CoreContainer.java     |  6 +--
 .../solr/metrics/SolrCoreMetricManager.java     |  6 ++-
 .../apache/solr/metrics/SolrMetricManager.java  | 52 ++++++++++++++++----
 .../reporters/solr/SolrClusterReporter.java     |  9 +++-
 .../reporters/solr/SolrShardReporter.java       |  9 +++-
 .../solr/metrics/SolrCoreMetricManagerTest.java |  2 +-
 .../solr/metrics/SolrMetricManagerTest.java     |  6 +--
 .../metrics/reporters/SolrJmxReporterTest.java  |  8 +--
 9 files changed, 77 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 60d29a6..f5fce01 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -73,6 +73,10 @@ Other Changes
 
 * SOLR-11145: Adds comprehensive unit tests for the Analytics Component v2 (Houston Putman)
 
+* SOLR-11389: For Solr(Shard|Cluster)Reporter instances the SolrMetricManager.registerReporter
+  method is now called after the SolrCore or CoreContainer has been set for the instance.
+  (Christine Poerschke)
+
 ==================  7.1.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/java/org/apache/solr/core/CoreContainer.java
----------------------------------------------------------------------
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 a9e815d..759e9a9 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -549,9 +549,9 @@ public class CoreContainer {
       containerHandlers.put(PKIAuthenticationPlugin.PATH, pkiAuthenticationPlugin.getRequestHandler());
 
     PluginInfo[] metricReporters = cfg.getMetricsConfig().getMetricReporters();
-    metricManager.loadReporters(metricReporters, loader, null, SolrInfoBean.Group.node);
-    metricManager.loadReporters(metricReporters, loader, null, SolrInfoBean.Group.jvm);
-    metricManager.loadReporters(metricReporters, loader, null, SolrInfoBean.Group.jetty);
+    metricManager.loadReporters(metricReporters, loader, this, null, null, SolrInfoBean.Group.node);
+    metricManager.loadReporters(metricReporters, loader, this, null, null, SolrInfoBean.Group.jvm);
+    metricManager.loadReporters(metricReporters, loader, this, null, null, SolrInfoBean.Group.jetty);
 
     coreConfigService = ConfigSetService.createConfigSetService(cfg, loader, zkSys.zkController);
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
index bf5a01a..74c9596 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrCoreMetricManager.java
@@ -23,6 +23,7 @@ import java.lang.invoke.MethodHandles;
 import com.codahale.metrics.MetricRegistry;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.common.util.Utils;
+import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.NodeConfig;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrCore;
@@ -82,9 +83,10 @@ public class SolrCoreMetricManager implements Closeable {
    * group or with a registry name specific to this core.
    */
   public void loadReporters() {
-    NodeConfig nodeConfig = core.getCoreContainer().getConfig();
+    CoreContainer coreContainer = core.getCoreContainer();
+    NodeConfig nodeConfig = coreContainer.getConfig();
     PluginInfo[] pluginInfos = nodeConfig.getMetricsConfig().getMetricReporters();
-    metricManager.loadReporters(pluginInfos, core.getResourceLoader(), tag,
+    metricManager.loadReporters(pluginInfos, core.getResourceLoader(), coreContainer, core, tag,
         SolrInfoBean.Group.core, registryName);
     if (cloudMode) {
       metricManager.loadShardReporters(pluginInfos, core);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
index 44e9d01..adfdda3 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
@@ -769,12 +769,14 @@ public class SolrMetricManager {
    * the list. If both attributes are present then only "group" attribute will be processed.
    * @param pluginInfos plugin configurations
    * @param loader resource loader
+   * @param coreContainer core container
+   * @param solrCore optional solr core
    * @param tag optional tag for the reporters, to distinguish reporters logically created for different parent
    *            component instances.
    * @param group selected group, not null
    * @param registryNames optional child registry name elements
    */
-  public void loadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, String tag, SolrInfoBean.Group group, String... registryNames) {
+  public void loadReporters(PluginInfo[] pluginInfos, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, String tag, SolrInfoBean.Group group, String... registryNames) {
     if (pluginInfos == null || pluginInfos.length == 0) {
       return;
     }
@@ -814,7 +816,7 @@ public class SolrMetricManager {
         }
       }
       try {
-        loadReporter(registryName, loader, info, tag);
+        loadReporter(registryName, loader, coreContainer, solrCore, info, tag);
       } catch (Exception e) {
         log.warn("Error loading metrics reporter, plugin info: " + info, e);
       }
@@ -822,16 +824,43 @@ public class SolrMetricManager {
   }
 
   /**
+   * Convenience wrapper for {@link SolrMetricManager#loadReporter(String, SolrResourceLoader, CoreContainer, SolrCore, PluginInfo, String)}
+   * passing {@link SolrCore#getResourceLoader()} and {@link SolrCore#getCoreContainer()} as the extra parameters.
+   */
+  public void loadReporter(String registry, SolrCore solrCore, PluginInfo pluginInfo, String tag) throws Exception {
+    loadReporter(registry,
+        solrCore.getResourceLoader(),
+        solrCore.getCoreContainer(),
+        solrCore,
+        pluginInfo,
+        tag);
+  }
+
+  /**
+   * Convenience wrapper for {@link SolrMetricManager#loadReporter(String, SolrResourceLoader, CoreContainer, SolrCore, PluginInfo, String)}
+   * passing {@link CoreContainer#getResourceLoader()} and null solrCore and tag.
+   */
+  public void loadReporter(String registry, CoreContainer coreContainer, PluginInfo pluginInfo) throws Exception {
+    loadReporter(registry,
+        coreContainer.getResourceLoader(),
+        coreContainer,
+        null,
+        pluginInfo,
+        null);
+  }
+
+  /**
    * Create and register an instance of {@link SolrMetricReporter}.
    * @param registry reporter is associated with this registry
    * @param loader loader to use when creating an instance of the reporter
+   * @param coreContainer core container
+   * @param solrCore optional solr core
    * @param pluginInfo plugin configuration. Plugin "name" and "class" attributes are required.
    * @param tag optional tag for the reporter, to distinguish reporters logically created for different parent
    *            component instances.
-   * @return instance of newly created and registered reporter
    * @throws Exception if any argument is missing or invalid
    */
-  public SolrMetricReporter loadReporter(String registry, SolrResourceLoader loader, PluginInfo pluginInfo, String tag) throws Exception {
+  public void loadReporter(String registry, SolrResourceLoader loader, CoreContainer coreContainer, SolrCore solrCore, PluginInfo pluginInfo, String tag) throws Exception {
     if (registry == null || pluginInfo == null || pluginInfo.name == null || pluginInfo.className == null) {
       throw new IllegalArgumentException("loadReporter called with missing arguments: " +
           "registry=" + registry + ", loader=" + loader + ", pluginInfo=" + pluginInfo);
@@ -846,12 +875,17 @@ public class SolrMetricManager {
         new Object[]{this, registry}
     );
     try {
-      reporter.init(pluginInfo);
+      if (reporter instanceof SolrShardReporter) {
+        ((SolrShardReporter)reporter).init(pluginInfo, solrCore);
+      } else if (reporter instanceof SolrClusterReporter) {
+        ((SolrClusterReporter)reporter).init(pluginInfo, coreContainer);
+      } else {
+        reporter.init(pluginInfo);
+      }
     } catch (IllegalStateException e) {
       throw new IllegalArgumentException("reporter init failed: " + pluginInfo, e);
     }
     registerReporter(registry, pluginInfo.name, tag, reporter);
-    return reporter;
   }
 
   private void registerReporter(String registry, String name, String tag, SolrMetricReporter reporter) throws Exception {
@@ -1078,9 +1112,8 @@ public class SolrMetricManager {
         attrs, initArgs);
     for (PluginInfo info : infos) {
       try {
-        SolrMetricReporter reporter = loadReporter(registryName, core.getResourceLoader(), info,
+        loadReporter(registryName, core, info,
             String.valueOf(core.hashCode()));
-        ((SolrShardReporter)reporter).setCore(core);
       } catch (Exception e) {
         log.warn("Could not load shard reporter, pluginInfo=" + info, e);
       }
@@ -1102,8 +1135,7 @@ public class SolrMetricManager {
     String registryName = getRegistryName(SolrInfoBean.Group.cluster);
     for (PluginInfo info : infos) {
       try {
-        SolrMetricReporter reporter = loadReporter(registryName, cc.getResourceLoader(), info, null);
-        ((SolrClusterReporter)reporter).setCoreContainer(cc);
+        loadReporter(registryName, cc, info);
       } catch (Exception e) {
         log.warn("Could not load cluster reporter, pluginInfo=" + info, e);
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
index d8714d4..936e30c 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
@@ -33,6 +33,7 @@ import org.apache.solr.cloud.ZkController;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrInfoBean;
 import org.apache.solr.handler.admin.MetricsCollectorHandler;
 import org.apache.solr.metrics.SolrMetricManager;
@@ -169,6 +170,11 @@ public class SolrClusterReporter extends SolrMetricReporter {
   }
 
   @Override
+  public void init(PluginInfo pluginInfo) {
+    throw new UnsupportedOperationException(getClass().getCanonicalName()+".init(PluginInfo) is not supported, use init(PluginInfo,CoreContainer) instead.");
+  }
+
+  @Override
   protected void doInit() {
     if (reports.isEmpty()) { // set defaults
       reports = DEFAULT_REPORTS;
@@ -187,7 +193,8 @@ public class SolrClusterReporter extends SolrMetricReporter {
     }
   }
 
-  public void setCoreContainer(CoreContainer cc) {
+  public void init(PluginInfo pluginInfo, CoreContainer cc) {
+    super.init(pluginInfo);
     if (reporter != null) {
       reporter.close();;
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
index 086c812..be54cd9 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrShardReporter.java
@@ -28,6 +28,7 @@ import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
+import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.handler.admin.MetricsCollectorHandler;
 import org.apache.solr.metrics.FilteringSolrMetricReporter;
@@ -91,6 +92,11 @@ public class SolrShardReporter extends FilteringSolrMetricReporter {
   }
 
   @Override
+  public void init(PluginInfo pluginInfo) {
+    throw new UnsupportedOperationException(getClass().getCanonicalName()+".init(PluginInfo) is not supported, use init(PluginInfo,SolrCore) instead.");
+  }
+
+  @Override
   protected void doInit() {
     if (filters.isEmpty()) {
       filters = DEFAULT_FILTERS;
@@ -116,7 +122,8 @@ public class SolrShardReporter extends FilteringSolrMetricReporter {
     }
   }
 
-  public void setCore(SolrCore core) {
+  public void init(PluginInfo pluginInfo, SolrCore core) {
+    super.init(pluginInfo);
     if (reporter != null) {
       reporter.close();
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
index 3001e0c..f036121 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrCoreMetricManagerTest.java
@@ -117,7 +117,7 @@ public class SolrCoreMetricManagerTest extends SolrTestCaseJ4 {
     PluginInfo pluginInfo = shouldDefinePlugin ? new PluginInfo(TestUtil.randomUnicodeString(random), attrs) : null;
 
     try {
-      metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+      metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore(),
           pluginInfo, String.valueOf(coreMetricManager.getCore().hashCode()));
       assertNotNull(pluginInfo);
       Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
index 87fc883..ed9e01a 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricManagerTest.java
@@ -205,7 +205,7 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
         createPluginInfo("core_foo", "core", null)
     };
     String tag = "xyz";
-    metricManager.loadReporters(plugins, loader, tag, SolrInfoBean.Group.node);
+    metricManager.loadReporters(plugins, loader, null, null, tag, SolrInfoBean.Group.node);
     Map<String, SolrMetricReporter> reporters = metricManager.getReporters(
         SolrMetricManager.getRegistryName(SolrInfoBean.Group.node));
     assertEquals(4, reporters.size());
@@ -214,7 +214,7 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
     assertTrue(reporters.containsKey("node_foo@" + tag));
     assertTrue(reporters.containsKey("multiregistry_foo@" + tag));
 
-    metricManager.loadReporters(plugins, loader, tag, SolrInfoBean.Group.core, "collection1");
+    metricManager.loadReporters(plugins, loader, null, null, tag, SolrInfoBean.Group.core, "collection1");
     reporters = metricManager.getReporters(
         SolrMetricManager.getRegistryName(SolrInfoBean.Group.core, "collection1"));
     assertEquals(5, reporters.size());
@@ -224,7 +224,7 @@ public class SolrMetricManagerTest extends SolrTestCaseJ4 {
     assertTrue(reporters.containsKey("core_foo@" + tag));
     assertTrue(reporters.containsKey("multiregistry_foo@" + tag));
 
-    metricManager.loadReporters(plugins, loader, tag, SolrInfoBean.Group.jvm);
+    metricManager.loadReporters(plugins, loader, null, null, tag, SolrInfoBean.Group.jvm);
     reporters = metricManager.getReporters(
         SolrMetricManager.getRegistryName(SolrInfoBean.Group.jvm));
     assertEquals(2, reporters.size());

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/0b0ed211/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
index e02db4b..3c7c25b 100644
--- a/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/reporters/SolrJmxReporterTest.java
@@ -80,7 +80,7 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
     coreMetricManager = core.getCoreMetricManager();
     metricManager = core.getCoreContainer().getMetricManager();
     PluginInfo pluginInfo = createReporterPluginInfo(rootName, true);
-    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore(),
         pluginInfo, coreMetricManager.getTag());
 
     Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());
@@ -165,7 +165,7 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
 
     h.getCoreContainer().reload(h.getCore().getName());
     PluginInfo pluginInfo = createReporterPluginInfo(rootName, true);
-    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore(),
         pluginInfo, String.valueOf(coreMetricManager.getCore().hashCode()));
     coreMetricManager.registerMetricProducer(scope, producer);
 
@@ -214,13 +214,13 @@ public class SolrJmxReporterTest extends SolrTestCaseJ4 {
   public void testEnabled() throws Exception {
     String root1 = PREFIX + TestUtil.randomSimpleString(random(), 5, 10);
     PluginInfo pluginInfo1 = createReporterPluginInfo(root1, true);
-    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore(),
         pluginInfo1, coreMetricManager.getTag());
 
     String root2 = PREFIX + TestUtil.randomSimpleString(random(), 5, 10);
     assertFalse(root2.equals(root1));
     PluginInfo pluginInfo2 = createReporterPluginInfo(root2, false);
-    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore().getResourceLoader(),
+    metricManager.loadReporter(coreMetricManager.getRegistryName(), coreMetricManager.getCore(),
         pluginInfo2, coreMetricManager.getTag());
 
     Map<String, SolrMetricReporter> reporters = metricManager.getReporters(coreMetricManager.getRegistryName());