From 121ac34af10759f086572288c32cae562086ff6a Mon Sep 17 00:00:00 2001 From: MUKUL GUPTA Date: Fri, 20 Mar 2026 10:17:27 +0530 Subject: [PATCH] [FLINK-38704][metrics] Fix MetricConfig.getString() to handle numeric values --- .../org/apache/flink/metrics/MetricConfig.java | 15 ++++++++++++++- .../apache/flink/metrics/MetricConfigTest.java | 9 ++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MetricConfig.java b/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MetricConfig.java index b9fcafb5f2d8a..17e77a0b1d19e 100644 --- a/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MetricConfig.java +++ b/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MetricConfig.java @@ -33,8 +33,21 @@ @Public public class MetricConfig extends Properties { + /** + * Returns the value associated with the given key as a {@code String}. + * + *

If the value is not a {@link String}, its {@code toString()} representation is returned. + * + * @param key the hashtable key. + * @param defaultValue a default value. + * @return the value in this property list with the specified key value as a String. + */ public String getString(String key, String defaultValue) { - return getProperty(key, defaultValue); + final Object value = get(key); + if (value == null) { + return defaultValue; + } + return value.toString(); } /** diff --git a/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/MetricConfigTest.java b/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/MetricConfigTest.java index d3be33d966383..2824328c6a5cd 100644 --- a/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/MetricConfigTest.java +++ b/flink-metrics/flink-metrics-core/src/test/java/org/apache/flink/metrics/MetricConfigTest.java @@ -90,7 +90,14 @@ private static Stream nativeTypeCases() { 123456789012345L), Arguments.of(3.14f, (TypedGetter) (c, k) -> c.getFloat(k, 0.0f), 3.14f), Arguments.of(2.718281828, (TypedGetter) (c, k) -> c.getDouble(k, 0.0), 2.718281828), - Arguments.of(true, (TypedGetter) (c, k) -> c.getBoolean(k, false), true)); + Arguments.of(true, (TypedGetter) (c, k) -> c.getBoolean(k, false), true), + Arguments.of(42, (TypedGetter) (c, k) -> c.getString(k, "default"), "42"), + Arguments.of( + 123456789012345L, + (TypedGetter) (c, k) -> c.getString(k, "default"), + "123456789012345"), + Arguments.of(3.14f, (TypedGetter) (c, k) -> c.getString(k, "default"), "3.14"), + Arguments.of(true, (TypedGetter) (c, k) -> c.getString(k, "default"), "true")); } private static Stream crossTypeCases() {