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;
+        }
+    }
 }

Reply via email to