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(