Skip to content

Commit

Permalink
Initialize distribution customizations even before config is applied (h…
Browse files Browse the repository at this point in the history
…elidon-io#9547) (helidon-io#9564)

* Initialize distribution customizations even before config is applied
Co-authored-by: Tim Quinn <[email protected]>
  • Loading branch information
barchetta authored Dec 4, 2024
1 parent 606b7b6 commit 2e4fd31
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 1 deletion.
13 changes: 13 additions & 0 deletions microprofile/metrics/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
<exclude>**/TestDisabledMetrics.java</exclude>
<exclude>**/TestSelectivelyDisabledMetrics.java</exclude>
<exclude>**/TestConfigProcessing.java</exclude>
<exclude>**/TestDistributionCustomizationsNoInit.java</exclude>
</excludes>
<systemPropertyVariables>
<junit.jupiter.extensions.autodetection.enabled>true</junit.jupiter.extensions.autodetection.enabled>
Expand Down Expand Up @@ -196,6 +197,18 @@
</systemPropertyVariables>
</configuration>
</execution>
<execution>
<!-- Run separately so the normal MP container start-up does not happen. -->
<id>test-dist-cust-with-no-init</id>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/TestDistributionCustomizationsNoInit.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class DistributionCustomizations {
private static final Duration DEFAULT_TIMER_MIN = Duration.ofMillis(5);
private static final Duration DEFAULT_TIMER_MAX = Duration.ofSeconds(10);

private static DistributionCustomizations instance;
private static DistributionCustomizations instance = new DistributionCustomizations();
private final List<Percentiles> percentileCustomizations;
private final List<SummaryBuckets> summaryBucketCustomizations;
private final List<TimerBuckets> timerBucketCustomizations;
Expand All @@ -82,6 +82,13 @@ private DistributionCustomizations(Config mpConfig) {
Boolean::parseBoolean));
}

private DistributionCustomizations() {
percentileCustomizations = List.of();
summaryBucketCustomizations = List.of();
timerBucketCustomizations = List.of();
summaryBucketDefaultCustomizations = List.of();
}

static void init(Config mpConfig) {
instance = new DistributionCustomizations(mpConfig);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Copyright (c) 2024 Oracle and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.helidon.microprofile.metrics;

import org.eclipse.microprofile.metrics.MetricRegistry;
import org.eclipse.microprofile.metrics.Timer;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.notNullValue;

class TestDistributionCustomizationsNoInit {

private static MetricRegistry metricRegistry;

@BeforeAll
static void initRegistry() {
metricRegistry = RegistryFactory.getInstance().getRegistry(MetricRegistry.APPLICATION_SCOPE);
}

@Test
void checkDistributionCustomizations() {
// Without the change in the main source, the following triggers an NPE because this test does not use @HelidonTest
// and therefore the normal metrics CDI extension initialization code--which sets up the distribution
// customizations--does not run. That means the configurable distribution customizations are never set, leading
// to the NPE.
Timer timer = metricRegistry.timer("testTimer");
assertThat("Timer", timer, notNullValue());
}
}

0 comments on commit 2e4fd31

Please sign in to comment.