Skip to content

Commit 3c39cb0

Browse files
Merge branch '1.11.x' into 1.12.x
2 parents b2250c5 + d19e766 commit 3c39cb0

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

Diff for: micrometer-core/src/main/java/io/micrometer/core/instrument/MeterRegistry.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.concurrent.TimeUnit;
3838
import java.util.concurrent.atomic.AtomicBoolean;
3939
import java.util.function.*;
40+
import java.util.stream.Collectors;
4041

4142
import static java.lang.String.format;
4243
import static java.util.Collections.emptyList;
@@ -63,6 +64,18 @@
6364
*/
6465
public abstract class MeterRegistry {
6566

67+
// @formatter:off
68+
private static final EnumMap<TimeUnit, String> BASE_TIME_UNIT_STRING_CACHE = Arrays.stream(TimeUnit.values())
69+
.collect(
70+
Collectors.toMap(
71+
Function.identity(),
72+
(timeUnit) -> timeUnit.toString().toLowerCase(),
73+
(k, v) -> { throw new IllegalStateException("Duplicate keys should not exist."); },
74+
() -> new EnumMap<>(TimeUnit.class)
75+
)
76+
);
77+
// @formatter:on
78+
6679
protected final Clock clock;
6780

6881
private final Object meterMapLock = new Object();
@@ -287,7 +300,7 @@ protected String getConventionName(Meter.Id id) {
287300
protected abstract DistributionStatisticConfig defaultHistogramConfig();
288301

289302
private String getBaseTimeUnitStr() {
290-
return getBaseTimeUnit().toString().toLowerCase();
303+
return BASE_TIME_UNIT_STRING_CACHE.get(getBaseTimeUnit());
291304
}
292305

293306
/**

Diff for: micrometer-core/src/test/java/io/micrometer/core/instrument/MeterRegistryTest.java

+9
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package io.micrometer.core.instrument;
1717

18+
import io.micrometer.core.Issue;
1819
import io.micrometer.core.instrument.config.MeterFilter;
1920
import io.micrometer.core.instrument.config.MeterFilterReply;
2021
import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
@@ -205,4 +206,12 @@ void shouldNotLetRegisteringMetersTwice() {
205206
.hasNoCause();
206207
}
207208

209+
@Test
210+
@Issue("#4352")
211+
void baseUnitStringShouldBeCachedAndReturnTheSameInstance() {
212+
Timer timer1 = registry.timer("test.timer1");
213+
Timer timer2 = registry.timer("test.timer2");
214+
assertThat(timer1.getId().getBaseUnit()).isSameAs(timer2.getId().getBaseUnit());
215+
}
216+
208217
}

0 commit comments

Comments
 (0)