From a177b2b46639f03315ec7d704acae45a1db94b22 Mon Sep 17 00:00:00 2001 From: "tim.quinn@oracle.com" Date: Mon, 12 Apr 2021 06:01:07 -0500 Subject: [PATCH] Review comments: use common service loader with priority ordering --- metrics/metrics/pom.xml | 4 ++++ .../helidon/metrics/ExemplarServiceManager.java | 15 ++++----------- .../helidon/metrics/TestNearestValueSearch.java | 14 +++++++------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/metrics/metrics/pom.xml b/metrics/metrics/pom.xml index 04168c8aac1..44a4afafaad 100644 --- a/metrics/metrics/pom.xml +++ b/metrics/metrics/pom.xml @@ -46,6 +46,10 @@ io.helidon.config helidon-config-mp + + io.helidon.common + helidon-common-service-loader + org.eclipse.microprofile.metrics microprofile-metrics-api diff --git a/metrics/metrics/src/main/java/io/helidon/metrics/ExemplarServiceManager.java b/metrics/metrics/src/main/java/io/helidon/metrics/ExemplarServiceManager.java index 80abaf907f1..d71d19e02fb 100644 --- a/metrics/metrics/src/main/java/io/helidon/metrics/ExemplarServiceManager.java +++ b/metrics/metrics/src/main/java/io/helidon/metrics/ExemplarServiceManager.java @@ -16,6 +16,8 @@ */ package io.helidon.metrics; +import io.helidon.common.serviceloader.HelidonServiceLoader; + import java.util.Comparator; import java.util.List; import java.util.ServiceLoader; @@ -36,6 +38,7 @@ class ExemplarServiceManager { private static final List EXEMPLAR_SERVICES = collectExemplarServices(); + private static final Supplier EXEMPLAR_SUPPLIER = EXEMPLAR_SERVICES.isEmpty() ? () -> "" : () -> EXEMPLAR_SERVICES.stream() @@ -57,21 +60,11 @@ static String exemplarLabel() { private static List collectExemplarServices() { List exemplarServices = - ServiceLoader.load(ExemplarService.class) - .stream() - .sorted(Comparator.comparing(ExemplarServiceManager::priorityValue)) - .map(ServiceLoader.Provider::get) - .collect(Collectors.toList()); - + HelidonServiceLoader.create(ServiceLoader.load(ExemplarService.class)).asList(); if (!exemplarServices.isEmpty()) { LOGGER.log(Level.INFO, "Using metrics ExemplarServices " + exemplarServices.toString()); } return exemplarServices; } - - private static int priorityValue(ServiceLoader.Provider exemplarSupportProvider) { - Priority p = exemplarSupportProvider.type().getAnnotation(Priority.class); - return p == null ? ExemplarService.DEFAULT_PRIORITY : p.value(); - } } diff --git a/metrics/metrics/src/test/java/io/helidon/metrics/TestNearestValueSearch.java b/metrics/metrics/src/test/java/io/helidon/metrics/TestNearestValueSearch.java index a14b6e84a2c..7a7f04a7e36 100644 --- a/metrics/metrics/src/test/java/io/helidon/metrics/TestNearestValueSearch.java +++ b/metrics/metrics/src/test/java/io/helidon/metrics/TestNearestValueSearch.java @@ -23,7 +23,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -public class TestNearestValueSearch { +class TestNearestValueSearch { private static final WeightedSample[] VALUES = new WeightedSample[] { new WeightedSample(1L), @@ -32,37 +32,37 @@ public class TestNearestValueSearch { new WeightedSample(7L)}; @Test - public void testExactMatch() { + void testExactMatch() { assertThat("Exact match of 1", WeightedSnapshot.slotNear(derived(1.0), VALUES), is(0)); assertThat("Exact match of 3", WeightedSnapshot.slotNear(derived(3.0), VALUES), is(1)); assertThat("Exact match of 5", WeightedSnapshot.slotNear(derived(5.0), VALUES), is(2)); } @Test - public void testBeforeFirst() { + void testBeforeFirst() { assertThat("Approx match before first element", WeightedSnapshot.slotNear(derived(0.5), VALUES), is(0)); } @Test - public void testAfterLast() { + void testAfterLast() { assertThat("Approx match after last element", WeightedSnapshot.slotNear(derived(9.0), VALUES), is(VALUES.length - 1)); } @Test - public void testCloserToLower() { + void testCloserToLower() { assertThat("Closer to lowest", WeightedSnapshot.slotNear(derived(1.2), VALUES), is(0)); assertThat("Closer to inside", WeightedSnapshot.slotNear(derived(3.2), VALUES), is(1)); } @Test - public void testCloserToHigher() { + void testCloserToHigher() { assertThat("Closer to highest", WeightedSnapshot.slotNear(derived(6.5), VALUES), is(3)); assertThat("Closer to inside", WeightedSnapshot.slotNear(derived(2.5), VALUES), is(1)); } @Test - public void testMidpoint() { + void testMidpoint() { assertThat("Midpoint", WeightedSnapshot.slotNear(derived(2.0), VALUES), is(0)); } }