IGNITE-15252 Fix the AssertionError when the JmxMetricExporterSpi unregister a filtered metric registry (#9300)
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.java
index d0a48da..687aad7 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/metric/jmx/JmxMetricExporterSpi.java
@@ -154,6 +154,9 @@
* @param mreg Metric registry.
*/
private void unregister(ReadOnlyMetricRegistry mreg) {
+ if (filter != null && !filter.test(mreg))
+ return;
+
MetricName n = parse(mreg.name());
try {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java
index a8744b4..a464ac6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/metric/JmxExporterSpiTest.java
@@ -43,6 +43,7 @@
import javax.management.MBeanParameterInfo;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularDataSupport;
+import com.google.common.collect.Iterators;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteJdbcThinDriver;
@@ -70,8 +71,10 @@
import org.apache.ignite.internal.metric.SystemViewSelfTest.TestTransformer;
import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
import org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
+import org.apache.ignite.internal.processors.metric.GridMetricManager;
import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.metric.impl.HistogramMetricImpl;
+import org.apache.ignite.internal.processors.metric.impl.MetricUtils;
import org.apache.ignite.internal.processors.odbc.jdbc.JdbcConnectionContext;
import org.apache.ignite.internal.processors.service.DummyService;
import org.apache.ignite.internal.util.StripedExecutor;
@@ -265,6 +268,26 @@
/** */
@Test
+ public void testRemoveFilteredRegistry() {
+ String regName = MetricUtils.metricName(FILTERED_PREFIX, "registry-for-remove");
+
+ GridMetricManager mmgr = ignite.context().metric();
+
+ mmgr.registry(regName);
+
+ assertTrue(Iterators.tryFind(mmgr.iterator(), mreg -> regName.equals(mreg.name())).isPresent());
+
+ assertThrowsWithCause(() -> metricRegistry(ignite.name(), null, regName), IgniteException.class);
+
+ mmgr.remove(regName);
+
+ assertFalse(Iterators.tryFind(mmgr.iterator(), mreg -> regName.equals(mreg.name())).isPresent());
+
+ assertThrowsWithCause(() -> metricRegistry(ignite.name(), null, regName), IgniteException.class);
+ }
+
+ /** */
+ @Test
public void testCachesView() throws Exception {
Set<String> cacheNames = new HashSet<>(Arrays.asList("cache-1", "cache-2"));