This is an automated email from the ASF dual-hosted git repository.

dimas pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 0bb062e71 fix: Improve reliability of metrics tests (#1763)
0bb062e71 is described below

commit 0bb062e71649dfb42d19065170a5b7ef7768f20b
Author: Dmitri Bourlatchkov <[email protected]>
AuthorDate: Fri May 30 16:48:49 2025 -0400

    fix: Improve reliability of metrics tests (#1763)
    
    CI sometimes fails with errors like "http_server_requests_seconds not found"
    in the reported metrics.
    
    This looks like a race between the Quarkus metrics producer and the
    tests asking for these metrics.
    
    This change adds a time-limited retry loop until the expected metrics
    are available, before proceeding with other assertions.
    
    Note: in normal cases the loop finishes fast because the metrics are
    available. The two-minute timeout would apply only when the expected
    metrics fail to be produced at all.
---
 .../service/quarkus/metrics/MetricsTestBase.java   | 24 ++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/metrics/MetricsTestBase.java
 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/metrics/MetricsTestBase.java
index 590712403..4932a831c 100644
--- 
a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/metrics/MetricsTestBase.java
+++ 
b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/metrics/MetricsTestBase.java
@@ -25,7 +25,9 @@ import static 
org.assertj.core.api.InstanceOfAssertFactories.type;
 import io.micrometer.core.instrument.MeterRegistry;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.core.Response;
+import java.time.Duration;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 import org.apache.polaris.service.quarkus.test.PolarisIntegrationTestFixture;
 import org.apache.polaris.service.quarkus.test.PolarisIntegrationTestHelper;
 import org.apache.polaris.service.quarkus.test.TestEnvironment;
@@ -41,6 +43,7 @@ import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @ExtendWith(TestEnvironmentExtension.class)
@@ -69,12 +72,26 @@ public abstract class MetricsTestBase {
     registry.clear();
   }
 
+  private Map<String, MetricFamily> fetchMetrics(String endpoint) {
+    AtomicReference<Map<String, MetricFamily>> value = new AtomicReference<>();
+    Awaitility.await()
+        .atMost(Duration.ofMinutes(2))
+        .untilAsserted(
+            () -> {
+              value.set(
+                  TestMetricsUtil.fetchMetrics(
+                      fixture.client, testEnv.baseManagementUri(), endpoint));
+              assertThat(value.get()).containsKey(API_METRIC_NAME);
+              assertThat(value.get()).containsKey(HTTP_METRIC_NAME);
+            });
+    return value.get();
+  }
+
   @ParameterizedTest
   @ValueSource(strings = {"%s/metrics", "%s/q/metrics"})
   public void testMetricsEmittedOnSuccessfulRequest(String endpoint) {
     sendSuccessfulRequest();
-    Map<String, MetricFamily> allMetrics =
-        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri(), endpoint);
+    Map<String, MetricFamily> allMetrics = fetchMetrics(endpoint);
     assertThat(allMetrics).containsKey(API_METRIC_NAME);
     assertThat(allMetrics.get(API_METRIC_NAME).getMetrics())
         .satisfiesOnlyOnce(
@@ -125,8 +142,7 @@ public abstract class MetricsTestBase {
   @ValueSource(strings = {"%s/metrics", "%s/q/metrics"})
   public void testMetricsEmittedOnFailedRequest(String endpoint) {
     sendFailingRequest();
-    Map<String, MetricFamily> allMetrics =
-        TestMetricsUtil.fetchMetrics(fixture.client, 
testEnv.baseManagementUri(), endpoint);
+    Map<String, MetricFamily> allMetrics = fetchMetrics(endpoint);
     assertThat(allMetrics).containsKey(API_METRIC_NAME);
     assertThat(allMetrics.get(API_METRIC_NAME).getMetrics())
         .satisfiesOnlyOnce(

Reply via email to