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/04/06 19:33:11 UTC
lucene-solr:jira/solr-9959: SOLR-9959 Add "rootName" property to
SolrJmxReporter,
and use it to fix the problem in MiniSolrCloudCluster where multiple
CoreContainer-s would produce the same MBean names.
Repository: lucene-solr
Updated Branches:
refs/heads/jira/solr-9959 d503fc8c1 -> 75dcf4f4e
SOLR-9959 Add "rootName" property to SolrJmxReporter, and use it to
fix the problem in MiniSolrCloudCluster where multiple CoreContainer-s
would produce the same MBean names.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/75dcf4f4
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/75dcf4f4
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/75dcf4f4
Branch: refs/heads/jira/solr-9959
Commit: 75dcf4f4e6f8e59fc9665940990c24ea060e4e80
Parents: d503fc8
Author: Andrzej Bialecki <ab...@apache.org>
Authored: Thu Apr 6 21:31:12 2017 +0200
Committer: Andrzej Bialecki <ab...@apache.org>
Committed: Thu Apr 6 21:31:12 2017 +0200
----------------------------------------------------------------------
.../src/java/org/apache/solr/core/SolrCore.java | 5 +--
.../solr/metrics/reporters/SolrJmxReporter.java | 33 +++++++++++++-------
.../client/solrj/impl/CloudSolrClientTest.java | 3 +-
.../apache/solr/cloud/MiniSolrCloudCluster.java | 5 +++
4 files changed, 31 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75dcf4f4/solr/core/src/java/org/apache/solr/core/SolrCore.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 4ed7006..419cafc 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -912,8 +912,9 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
initializeMetrics(metricManager, coreMetricManager.getRegistryName(), null);
SolrFieldCacheBean solrFieldCacheBean = new SolrFieldCacheBean();
- // XXX this should be registered at the CONTAINER level because it's not core-specific!
- solrFieldCacheBean.initializeMetrics(metricManager, coreMetricManager.getRegistryName(), null);
+ // this is registered at the CONTAINER level because it's not core-specific - for now we
+ // also register it here for back-compat
+ solrFieldCacheBean.initializeMetrics(metricManager, coreMetricManager.getRegistryName(), getCategory().toString());
infoRegistry.put("fieldCache", solrFieldCacheBean);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75dcf4f4/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
index 918f38d..6f13754 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/SolrJmxReporter.java
@@ -53,6 +53,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
private String domain;
private String agentId;
private String serviceUrl;
+ private String rootName;
private JmxReporter reporter;
private MetricRegistry registry;
@@ -83,7 +84,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
log.info("JMX monitoring disabled for registry " + registryName);
return;
}
- log.info("Initializing for registry " + registryName);
+ log.debug("Initializing for registry " + registryName);
if (serviceUrl != null && agentId != null) {
mBeanServer = JmxUtil.findFirstMBeanServer();
log.warn("No more than one of serviceUrl(%s) and agentId(%s) should be configured, using first MBeanServer instead of configuration.",
@@ -107,14 +108,18 @@ public class SolrJmxReporter extends SolrMetricReporter {
return;
}
- JmxObjectNameFactory jmxObjectNameFactory = new JmxObjectNameFactory(pluginInfo.name, domain);
+ String fullDomain = domain;
+ if (rootName != null && !rootName.isEmpty()) {
+ fullDomain = rootName + "." + domain;
+ }
+ JmxObjectNameFactory jmxObjectNameFactory = new JmxObjectNameFactory(pluginInfo.name, fullDomain);
registry = metricManager.registry(registryName);
// filter out MetricsMap gauges - we have a better way of handling them
MetricFilter filter = (name, metric) -> !(metric instanceof MetricsMap);
reporter = JmxReporter.forRegistry(registry)
.registerWith(mBeanServer)
- .inDomain(domain)
+ .inDomain(fullDomain)
.filter(filter)
.createsObjectNamesWith(jmxObjectNameFactory)
.build();
@@ -123,7 +128,7 @@ public class SolrJmxReporter extends SolrMetricReporter {
listener = new MetricsMapListener(mBeanServer, jmxObjectNameFactory);
registry.addListener(listener);
- log.info("JMX monitoring for registry '" + registryName + "' enabled at server: " + mBeanServer);
+ log.info("JMX monitoring for '" + fullDomain + "' (registry '" + registryName + "') enabled at server: " + mBeanServer);
}
/**
@@ -153,9 +158,19 @@ public class SolrJmxReporter extends SolrMetricReporter {
// Nothing to validate
}
+
+ /**
+ * Set root name of the JMX hierarchy for this reporter. Default (null or empty) is none, ie.
+ * the hierarchy will start from the domain name.
+ * @param rootName root name of the JMX name hierarchy, or null or empty for default.
+ */
+ public void setRootName(String rootName) {
+ this.rootName = rootName;
+ }
+
/**
* Sets the domain with which MBeans are published. If none is set,
- * the domain defaults to the name of the core.
+ * the domain defaults to the name of the registry.
*
* @param domain the domain
*/
@@ -239,8 +254,8 @@ public class SolrJmxReporter extends SolrMetricReporter {
@Override
public String toString() {
- return String.format(Locale.ENGLISH, "[%s@%s: domain = %s, service url = %s, agent id = %s]",
- getClass().getName(), Integer.toHexString(hashCode()), domain, serviceUrl, agentId);
+ return String.format(Locale.ENGLISH, "[%s@%s: rootName = %, domain = %s, service url = %s, agent id = %s]",
+ getClass().getName(), Integer.toHexString(hashCode()), rootName, domain, serviceUrl, agentId);
}
private static class MetricsMapListener extends MetricRegistryListener.Base {
@@ -266,10 +281,6 @@ public class SolrJmxReporter extends SolrMetricReporter {
}
try {
ObjectName objectName = nameFactory.createName("gauges", nameFactory.getDomain(), name);
- if (server.isRegistered(objectName)) {
- // silently unregister - may have been left over from a previous reporter
- server.unregisterMBean(objectName);
- }
// some MBean servers re-write object name to include additional properties
ObjectInstance instance = server.registerMBean(gauge, objectName);
if (instance != null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75dcf4f4/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
index 4ec1a67..5ebb650 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
@@ -448,8 +448,7 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
return null;
}
if (scope != null) { // admin handler uses a meter instead of counter here
- map = (Map<String,Object>)map.get(name);
- return (Long)map.get("count");
+ return (Long)map.get(name + ".count");
} else {
return (Long) map.get(name);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/75dcf4f4/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
----------------------------------------------------------------------
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 15895d3..0605281 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
@@ -87,6 +87,11 @@ public class MiniSolrCloudCluster {
" <int name=\"distribUpdateConnTimeout\">${distribUpdateConnTimeout:45000}</int>\n" +
" <int name=\"distribUpdateSoTimeout\">${distribUpdateSoTimeout:340000}</int>\n" +
" </solrcloud>\n" +
+ " <metrics>\n" +
+ " <reporter name=\"default\" class=\"org.apache.solr.metrics.reporters.SolrJmxReporter\">\n" +
+ " <str name=\"rootName\">solr_${hostPort:8983}</str>\n" +
+ " </reporter>\n" +
+ " </metrics>\n" +
" \n" +
"</solr>\n";