SOLR-12765: Incorrect format of JMX cache stats.
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index e031271..42bb0c7 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -37,6 +37,8 @@
* SOLR-12594: MetricsHistoryHandler.getOverseerLeader fails when hostname contains hyphen. (ab)
+* SOLR-12765: Incorrect format of JMX cache stats. (Bojan Smid, ab)
+
================== 7.4.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/jmx/JmxMetricsReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/jmx/JmxMetricsReporter.java
index 54da5fa..7b0b8ac 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/jmx/JmxMetricsReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/jmx/JmxMetricsReporter.java
@@ -50,6 +50,7 @@
import com.codahale.metrics.Reporter;
import com.codahale.metrics.Timer;
import org.apache.solr.metrics.MetricsMap;
+import org.apache.solr.metrics.SolrMetricManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -558,9 +559,12 @@
try {
if (filter.matches(name, gauge)) {
final ObjectName objectName = createName("gauges", name);
- if (gauge instanceof MetricsMap) {
- ((MetricsMap)gauge).setAttribute(new Attribute(INSTANCE_TAG, tag));
- registerMBean(gauge, objectName);
+ if (gauge instanceof SolrMetricManager.GaugeWrapper &&
+ ((SolrMetricManager.GaugeWrapper)gauge).getGauge() instanceof MetricsMap) {
+ MetricsMap mm = (MetricsMap)((SolrMetricManager.GaugeWrapper)gauge).getGauge();
+ mm.setAttribute(new Attribute(INSTANCE_TAG, tag));
+ // don't wrap it in a JmxGauge, it already supports all necessary JMX attributes
+ registerMBean(mm, objectName);
} else {
registerMBean(new JmxGauge(gauge, objectName, tag), objectName);
}