This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit b44db02e841e5eb39684ed2da3b9d5c976d3ab4e Author: Lari Hotari <[email protected]> AuthorDate: Tue May 6 21:16:11 2025 +0300 [fix][broker] Unregister non-static metrics collectors registered in Prometheus default registry (#24257) (cherry picked from commit 9cf821d399446bb1a62ead23c2627876a0058131) --- .../apache/pulsar/broker/service/BrokerService.java | 4 ++++ .../stats/prometheus/metrics/ObserverGauge.java | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java index 00b3f41c74b..ef9007fdeea 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java @@ -819,6 +819,10 @@ public class BrokerService implements Closeable { try { log.info("Shutting down Pulsar Broker service"); + // unregister non-static metrics collectors + pendingTopicLoadRequests.unregister(); + pendingLookupRequests.unregister(); + // unloads all namespaces gracefully without disrupting mutually unloadNamespaceBundlesGracefully(); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/ObserverGauge.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/ObserverGauge.java index b1a1856cf71..d0098368cd7 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/ObserverGauge.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/ObserverGauge.java @@ -19,6 +19,7 @@ package org.apache.pulsar.broker.stats.prometheus.metrics; import io.prometheus.client.Collector; +import io.prometheus.client.CollectorRegistry; import io.prometheus.client.GaugeMetricFamily; import io.prometheus.client.SimpleCollector; import java.util.ArrayList; @@ -39,9 +40,11 @@ public class ObserverGauge extends SimpleCollector<ObserverGauge.Child> implemen return this; } - public ObserverGauge register() { + public ObserverGauge register(CollectorRegistry registry) { try { - return super.register(); + ObserverGauge instance = super.register(registry); + instance.setRegistry(registry); + return instance; } catch (Exception e) { // Handle double registration errors in tests return create(); @@ -71,6 +74,7 @@ public class ObserverGauge extends SimpleCollector<ObserverGauge.Child> implemen } private final Supplier<Number> supplier; + private volatile CollectorRegistry registry; private ObserverGauge(Builder builder) { super(builder); @@ -99,4 +103,15 @@ public class ObserverGauge extends SimpleCollector<ObserverGauge.Child> implemen public List<MetricFamilySamples> describe() { return Collections.singletonList(new GaugeMetricFamily(fullname, help, labelNames)); } + + protected void setRegistry(CollectorRegistry registry) { + this.registry = registry; + } + + public void unregister() { + if (registry != null) { + registry.unregister(this); + registry = null; + } + } }
