This is an automated email from the ASF dual-hosted git repository.
namelchev pushed a commit to branch ignite-2.16
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-2.16 by this push:
new 4160debe1bc IGNITE-18434 Fixed histogram metric configuration restore
on node restart (#11028)
4160debe1bc is described below
commit 4160debe1bc722418157d62a71eac8502a9d99e3
Author: Vladimir Steshin <[email protected]>
AuthorDate: Tue Nov 7 14:49:17 2023 +0300
IGNITE-18434 Fixed histogram metric configuration restore on node restart
(#11028)
(cherry picked from commit 15e18b52447648e924abc55a9915c0aa176b34e0)
---
.../internal/processors/metric/MetricRegistry.java | 42 +++++++++++-----------
.../internal/metric/MetricsConfigurationTest.java | 40 +++++++++++++++++++++
2 files changed, 62 insertions(+), 20 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/MetricRegistry.java
b/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/MetricRegistry.java
index 8602d594039..801cdfb4bec 100644
---
a/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/MetricRegistry.java
+++
b/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/MetricRegistry.java
@@ -269,16 +269,7 @@ public class MetricRegistry implements
ReadOnlyMetricRegistry {
* @see HitRateMetric
*/
public HitRateMetric hitRateMetric(String name, @Nullable String desc,
long rateTimeInterval, int size) {
- String fullName = metricName(regName, name);
-
- HitRateMetric metric = addMetric(name, new HitRateMetric(fullName,
desc, rateTimeInterval, size));
-
- Long cfgRateTimeInterval = hitRateCfgProvider.apply(fullName);
-
- if (cfgRateTimeInterval != null)
- metric.reset(cfgRateTimeInterval, DFLT_SIZE);
-
- return metric;
+ return addMetric(name, new HitRateMetric(metricName(regName, name),
desc, rateTimeInterval, size));
}
/**
@@ -302,16 +293,7 @@ public class MetricRegistry implements
ReadOnlyMetricRegistry {
* @return {@link HistogramMetricImpl}
*/
public HistogramMetricImpl histogram(String name, long[] bounds, @Nullable
String desc) {
- String fullName = metricName(regName, name);
-
- HistogramMetricImpl metric = addMetric(name, new
HistogramMetricImpl(fullName, desc, bounds));
-
- long[] cfgBounds = histogramCfgProvider.apply(fullName);
-
- if (cfgBounds != null)
- metric.reset(cfgBounds);
-
- return metric;
+ return addMetric(name, new HistogramMetricImpl(metricName(regName,
name), desc, bounds));
}
/**
@@ -330,9 +312,29 @@ public class MetricRegistry implements
ReadOnlyMetricRegistry {
if (old != null)
return old;
+ configureMetrics(metric);
+
return metric;
}
+ /**
+ * Assigns metric settings if {@code metric} is configurable.
+ */
+ private void configureMetrics(Metric metric) {
+ if (metric instanceof HistogramMetricImpl) {
+ long[] cfgBounds = histogramCfgProvider.apply(metric.name());
+
+ if (cfgBounds != null)
+ ((HistogramMetricImpl)metric).reset(cfgBounds);
+ }
+ else if (metric instanceof HitRateMetric) {
+ Long cfgRateTimeInterval = hitRateCfgProvider.apply(metric.name());
+
+ if (cfgRateTimeInterval != null)
+ ((HitRateMetric)metric).reset(cfgRateTimeInterval, DFLT_SIZE);
+ }
+ }
+
/** {@inheritDoc} */
@Override public String name() {
return regName;
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
index 622bea647c3..29e31865926 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsConfigurationTest.java
@@ -27,6 +27,7 @@ import
org.apache.ignite.internal.processors.metric.MetricsMxBeanImpl;
import org.apache.ignite.internal.processors.metric.impl.HistogramMetricImpl;
import org.apache.ignite.internal.processors.metric.impl.HitRateMetric;
import
org.apache.ignite.internal.processors.metric.impl.PeriodicHistogramMetricImpl;
+import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.mxbean.MetricsMxBean;
import org.apache.ignite.spi.metric.HistogramMetric;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -39,6 +40,8 @@ import static
org.apache.ignite.internal.processors.metric.GridMetricManager.HIT
import static
org.apache.ignite.internal.processors.metric.GridMetricManager.TX_METRICS;
import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.cacheMetricsRegistryName;
import static
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
+import static
org.apache.ignite.internal.processors.pool.PoolProcessor.TASK_EXEC_TIME;
+import static
org.apache.ignite.internal.processors.pool.PoolProcessor.THREAD_POOLS;
import static
org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertNotEquals;
@@ -59,9 +62,18 @@ public class MetricsConfigurationTest extends
GridCommonAbstractTest {
/** {@inheritDoc} */
@Override protected void beforeTest() throws Exception {
+ super.beforeTest();
+
cleanPersistenceDir();
}
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ super.afterTest();
+
+ stopAllGrids();
+ }
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
@@ -306,6 +318,34 @@ public class MetricsConfigurationTest extends
GridCommonAbstractTest {
});
}
+ /**
+ * Tests that histogram configuration is read again after node restart.
+ */
+ @Test
+ public void testHistogramConfigIsKeptAfterNodeRestart() throws Exception {
+ IgniteEx ignite = startGrid("persistent-0");
+
+ ignite.cluster().state(ClusterState.ACTIVE);
+
+ String regName = metricName(THREAD_POOLS, "StripedExecutor");
+
+ HistogramMetric hist =
ignite.context().metric().registry(regName).findMetric(TASK_EXEC_TIME);
+
+ assertFalse(F.arrayEq(BOUNDS, hist.bounds()));
+
+ ignite.context().metric().configureHistogram(metricName(regName,
TASK_EXEC_TIME), BOUNDS);
+
+ assertTrue(F.arrayEq(BOUNDS, hist.bounds()));
+
+ stopGrid("persistent-0", false);
+
+ ignite = startGrid("persistent-0");
+
+ hist =
ignite.context().metric().registry(regName).findMetric(TASK_EXEC_TIME);
+
+ assertTrue(F.arrayEq(BOUNDS, hist.bounds()));
+ }
+
/** Tests metric configuration removed on registry remove. */
@Test
public void testConfigRemovedOnCacheGroupRemove() throws Exception {