This is an automated email from the ASF dual-hosted git repository.
NSAmelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 8266f08c604 IGNITE-29076 Fix string representation of array-valued
metrics (#13617)
8266f08c604 is described below
commit 8266f08c6042fc36c57b23a8cbd9ac519c4d4b9f
Author: Nikita Amelchev <[email protected]>
AuthorDate: Fri Sep 25 17:24:19 2026 +0300
IGNITE-29076 Fix string representation of array-valued metrics (#13617)
---
.../org/apache/ignite/spi/metric/ObjectMetric.java | 13 ++++++++++++-
.../ignite/internal/metric/MetricsSelfTest.java | 20 ++++++++++++++++++++
.../internal/thread/pool/ThreadPoolMetricsTest.java | 9 ++++++++-
3 files changed, 40 insertions(+), 2 deletions(-)
diff --git
a/modules/core/src/main/java/org/apache/ignite/spi/metric/ObjectMetric.java
b/modules/core/src/main/java/org/apache/ignite/spi/metric/ObjectMetric.java
index f931fef7efe..95c1e3d640a 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/metric/ObjectMetric.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/metric/ObjectMetric.java
@@ -17,6 +17,7 @@
package org.apache.ignite.spi.metric;
+import java.util.Arrays;
import org.jetbrains.annotations.Nullable;
/**
@@ -29,13 +30,23 @@ public interface ObjectMetric<T> extends Metric {
/** @return Type of metric value. */
public Class<T> type();
- /** {@inheritDoc} */
+ /**
+ * {@inheritDoc}
+ * <p>
+ * Array values are rendered as a comma-separated list of elements in
square brackets, for example {@code [1, 2, 3]}.
+ */
@Override @Nullable default String getAsString() {
T val = value();
if (val == null)
return null;
+ if (val.getClass().isArray()) {
+ String str = Arrays.deepToString(new Object[] {val});
+
+ return str.substring(1, str.length() - 1);
+ }
+
return val.toString();
}
}
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsSelfTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsSelfTest.java
index 17d6ac88efd..cafa31dc1f9 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsSelfTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/metric/MetricsSelfTest.java
@@ -235,6 +235,26 @@ public class MetricsSelfTest extends
GridCommonAbstractTest {
assertEquals(v[0], m.value());
}
+ /** */
+ @Test
+ public void testArrayMetricAsString() {
+ mreg.register("intArr", () -> new int[] {1, 2, 3}, int[].class,
"test");
+ mreg.register("longArr", () -> new long[] {4L, 5L}, long[].class,
"test");
+ mreg.register("boolArr", () -> new boolean[] {true, false},
boolean[].class, "test");
+ mreg.register("strArr", () -> new String[] {"a", null},
String[].class, "test");
+ mreg.register("nestedArr", () -> new int[][] {{1}, {2, 3}},
int[][].class, "test");
+ mreg.register("emptyArr", () -> new int[0], int[].class, "test");
+ mreg.register("nullArr", () -> null, int[].class, "test");
+
+ assertEquals("[1, 2, 3]", mreg.findMetric("intArr").getAsString());
+ assertEquals("[4, 5]", mreg.findMetric("longArr").getAsString());
+ assertEquals("[true, false]",
mreg.findMetric("boolArr").getAsString());
+ assertEquals("[a, null]", mreg.findMetric("strArr").getAsString());
+ assertEquals("[[1], [2, 3]]",
mreg.findMetric("nestedArr").getAsString());
+ assertEquals("[]", mreg.findMetric("emptyArr").getAsString());
+ assertNull(mreg.findMetric("nullArr").getAsString());
+ }
+
/** */
@Test
public void testBooleanGauges() throws Exception {
diff --git
a/modules/core/src/test/java/org/apache/ignite/internal/thread/pool/ThreadPoolMetricsTest.java
b/modules/core/src/test/java/org/apache/ignite/internal/thread/pool/ThreadPoolMetricsTest.java
index de9fbf542e3..085d99e705d 100644
---
a/modules/core/src/test/java/org/apache/ignite/internal/thread/pool/ThreadPoolMetricsTest.java
+++
b/modules/core/src/test/java/org/apache/ignite/internal/thread/pool/ThreadPoolMetricsTest.java
@@ -235,9 +235,16 @@ public class ThreadPoolMetricsTest extends
GridCommonAbstractTest {
assertTrue(errMsg, stream(execTimeMetric.value()).sum() >=
taskCnt);
if (stripedExecutor) {
- assertTrue(errMsg,
((IntMetric)mreg.findMetric("StripesCount")).value() > 0);
+ int stripes =
((IntMetric)mreg.findMetric("StripesCount")).value();
+
+ assertTrue(errMsg, stripes > 0);
assertTrue(errMsg,
((LongMetric)mreg.findMetric("TotalCompletedTasksCount")).value() >= taskCnt);
+ String statuses =
mreg.findMetric("StripesActiveStatuses").getAsString();
+
+ assertEquals(Arrays.toString(new int[stripes]),
mreg.findMetric("StripesQueueSizes").getAsString());
+ assertTrue(statuses.contains("true") && statuses.split(",
").length == stripes);
+
continue;
}