Skip to content

Commit 6bce4c0

Browse files
committed
[FLINK-22510][core] Format durations with highest unit
When converting a configuration value to a string, durations were formatted in nanoseconds regardless of their values. This produces serialized outputs which are hard to understand for humans. The functionality of formatting in the highest unit which allows the value to be an integer already exists, thus we can simply defer to it to produce a more useful result.
1 parent 334dae6 commit 6bce4c0

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

flink-core/src/main/java/org/apache/flink/configuration/ConfigurationUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ static String convertToString(Object o) {
389389
return (String) o;
390390
} else if (o.getClass() == Duration.class) {
391391
Duration duration = (Duration) o;
392-
return String.format("%d ns", duration.toNanos());
392+
return TimeUtils.formatWithHighestUnit(duration);
393393
} else if (o instanceof List) {
394394
return ((List<?>) o)
395395
.stream()

flink-core/src/test/java/org/apache/flink/configuration/ConfigurationTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,8 +340,7 @@ public void testToMap() {
340340

341341
assertEquals(listValues, configuration.toMap().get(listConfigOption.key()));
342342
assertEquals(mapValues, configuration.toMap().get(mapConfigOption.key()));
343-
assertEquals(
344-
duration.toNanos() + " ns", configuration.toMap().get(durationConfigOption.key()));
343+
assertEquals("3 s", configuration.toMap().get(durationConfigOption.key()));
345344
}
346345

347346
enum TestEnum {

flink-core/src/test/java/org/apache/flink/configuration/ConfigurationUtilsTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@
2222

2323
import org.junit.Test;
2424

25+
import java.time.Duration;
26+
import java.util.ArrayList;
2527
import java.util.Arrays;
2628
import java.util.HashMap;
29+
import java.util.List;
2730
import java.util.Map;
2831
import java.util.Properties;
2932

3033
import static org.hamcrest.Matchers.equalTo;
3134
import static org.hamcrest.Matchers.is;
35+
import static org.junit.Assert.assertEquals;
3236
import static org.junit.Assert.assertThat;
3337

3438
/** Tests for the {@link ConfigurationUtils}. */
@@ -92,4 +96,29 @@ public void testGetPrefixedKeyValuePairs() {
9296

9397
assertThat(resultKeyValuePairs, is(equalTo(expectedKeyValuePairs)));
9498
}
99+
100+
@Test
101+
public void testConvertToString() {
102+
// String
103+
assertEquals("Simple String", ConfigurationUtils.convertToString("Simple String"));
104+
105+
// Duration
106+
assertEquals("0 ms", ConfigurationUtils.convertToString(Duration.ZERO));
107+
assertEquals("123 ms", ConfigurationUtils.convertToString(Duration.ofMillis(123L)));
108+
assertEquals("1234 s", ConfigurationUtils.convertToString(Duration.ofMillis(1_234_000L)));
109+
assertEquals("25 h", ConfigurationUtils.convertToString(Duration.ofHours(25L)));
110+
111+
// List
112+
final List<Object> listElements = new ArrayList<>();
113+
listElements.add("Test;String");
114+
listElements.add(Duration.ZERO);
115+
listElements.add(42);
116+
assertEquals("'Test;String';0 ms;42", ConfigurationUtils.convertToString(listElements));
117+
118+
// Map
119+
final Map<Object, Object> mapElements = new HashMap<>();
120+
mapElements.put("A:,B", "C:,D");
121+
mapElements.put(10, 20);
122+
assertEquals("'''A:,B'':''C:,D''',10:20", ConfigurationUtils.convertToString(mapElements));
123+
}
95124
}

flink-table/flink-sql-client/src/test/java/org/apache/flink/table/client/config/YamlConfigUtilsTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ public void testExecutionEntryToConfigOption() throws Exception {
112112
"parallelism.default=1",
113113
"pipeline.auto-watermark-interval=99",
114114
"pipeline.max-parallelism=16",
115-
"restart-strategy.failure-rate.delay=1000000000 ns",
116-
"restart-strategy.failure-rate.failure-rate-interval=99000000000 ns",
115+
"restart-strategy.failure-rate.delay=1 s",
116+
"restart-strategy.failure-rate.failure-rate-interval=99 s",
117117
"restart-strategy.failure-rate.max-failures-per-interval=10",
118118
"restart-strategy.fixed-delay.delay=1000",
119119
"restart-strategy=failure-rate",

0 commit comments

Comments
 (0)