You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by lh...@apache.org on 2025/10/28 16:35:00 UTC
(pulsar) 09/15: [fix][test] BacklogQuotaManagerTest.backlogsAgeMetricsNoPreciseWithoutBacklogQuota handle empty /metrics scrape (#24887)
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 42e02a866df49147876a21996d45abaf4f2a7c42
Author: Vinkal <vi...@users.noreply.github.com>
AuthorDate: Mon Oct 27 14:37:56 2025 +0530
[fix][test] BacklogQuotaManagerTest.backlogsAgeMetricsNoPreciseWithoutBacklogQuota handle empty /metrics scrape (#24887)
Signed-off-by: Vinkal Chudgar <vi...@gmail.com>
(cherry picked from commit ba8468eb5c5b686249aa1e39d2c8b6a1aacbea88)
---
.../broker/service/BacklogQuotaManagerTest.java | 45 ++++++++++++++++++----
1 file changed, 37 insertions(+), 8 deletions(-)
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
index 46d06a71228..3c8dcfdc12f 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BacklogQuotaManagerTest.java
@@ -95,6 +95,7 @@ public class BacklogQuotaManagerTest {
private static final Logger log = LoggerFactory.getLogger(BacklogQuotaManagerTest.class);
public static final String CLUSTER_NAME = "usc";
+ private static final String QUOTA_CHECK_COUNT = "pulsar_storage_backlog_quota_check_duration_seconds_count";
PulsarService pulsar;
ServiceConfiguration config;
@@ -934,11 +935,31 @@ public class BacklogQuotaManagerTest {
}
private void waitForQuotaCheckToRunTwice() {
- final long initialQuotaCheckCount = getQuotaCheckCount();
+ final long[] baselineCount = new long[1];
+ final boolean[] baselineCaptured = new boolean[1];
+
Awaitility.await()
.pollInterval(1, SECONDS)
.atMost(TIME_TO_CHECK_BACKLOG_QUOTA * 3, SECONDS)
- .until(() -> getQuotaCheckCount() > initialQuotaCheckCount + 1);
+ .until(() -> {
+ final java.util.OptionalLong countOpt = getQuotaCheckCount();
+
+ // If /metrics is not returning the metric yet, keep waiting.
+ // Don't take the baseline until a successful scrape shows the metric.
+ if (countOpt.isEmpty()) {
+ return false;
+ }
+
+ // First successful scrape: capture baseline, then ask for two more checks.
+ final long observedCount = countOpt.getAsLong();
+ if (!baselineCaptured[0]) {
+ baselineCount[0] = observedCount;
+ baselineCaptured[0] = true;
+ return false;
+ }
+
+ return observedCount > baselineCount[0] + 1;
+ });
}
/**
@@ -952,12 +973,20 @@ public class BacklogQuotaManagerTest {
markDeletePosition -> markDeletePosition != null && !markDeletePosition.equals(previousMarkDeletePosition));
}
- private long getQuotaCheckCount() {
- Metrics metrics = prometheusMetricsClient.getMetrics();
- return (long) metrics.findByNameAndLabels(
- "pulsar_storage_backlog_quota_check_duration_seconds_count",
- "cluster", CLUSTER_NAME)
- .get(0).value;
+ private java.util.OptionalLong getQuotaCheckCount() {
+ try {
+ final Metrics metrics = prometheusMetricsClient.getMetrics();
+ final java.util.List<Metric> matches =
+ metrics.findByNameAndLabels(QUOTA_CHECK_COUNT, "cluster", CLUSTER_NAME);
+ if (matches.isEmpty()) {
+ // No metric sample for this name and labels in this scrape.
+ return java.util.OptionalLong.empty();
+ }
+ return java.util.OptionalLong.of((long) matches.get(0).value);
+ } catch (Exception e) {
+ // Scrape failed or the metrics client threw, treat as not available now.
+ return java.util.OptionalLong.empty();
+ }
}
/**