diff --git a/micrometer-core/src/main/java/io/micrometer/core/instrument/internal/DefaultLongTaskTimer.java b/micrometer-core/src/main/java/io/micrometer/core/instrument/internal/DefaultLongTaskTimer.java index ad8591d573..7f56455158 100644 --- a/micrometer-core/src/main/java/io/micrometer/core/instrument/internal/DefaultLongTaskTimer.java +++ b/micrometer-core/src/main/java/io/micrometer/core/instrument/internal/DefaultLongTaskTimer.java @@ -128,10 +128,10 @@ public TimeUnit baseTimeUnit() { @Override public HistogramSnapshot takeSnapshot() { + double[] percentilesRequestedArr = distributionStatisticConfig.getPercentiles(); Queue percentilesRequested = new ArrayBlockingQueue<>( - distributionStatisticConfig.getPercentiles() == null ? 1 + percentilesRequestedArr == null || percentilesRequestedArr.length == 0 ? 1 : distributionStatisticConfig.getPercentiles().length); - double[] percentilesRequestedArr = distributionStatisticConfig.getPercentiles(); if (percentilesRequestedArr != null && percentilesRequestedArr.length > 0) { Arrays.stream(percentilesRequestedArr).sorted().boxed().forEach(percentilesRequested::add); } diff --git a/micrometer-core/src/test/java/io/micrometer/core/instrument/MeterRegistryTest.java b/micrometer-core/src/test/java/io/micrometer/core/instrument/MeterRegistryTest.java index 0940a64a91..58abd569e1 100644 --- a/micrometer-core/src/test/java/io/micrometer/core/instrument/MeterRegistryTest.java +++ b/micrometer-core/src/test/java/io/micrometer/core/instrument/MeterRegistryTest.java @@ -214,4 +214,11 @@ void baseUnitStringShouldBeCachedAndReturnTheSameInstance() { assertThat(timer1.getId().getBaseUnit()).isSameAs(timer2.getId().getBaseUnit()); } + @Test + @Issue("#4482") + void acceptPercentilesNullOrEmpty() { + LongTaskTimer.builder("timer.percentiles.null").publishPercentiles(null).register(registry); + LongTaskTimer.builder("timer.percentiles.empty").publishPercentiles(new double[] {}).register(registry); + } + }