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/05/09 17:55:45 UTC

(pulsar) 04/23: [fix][broker] Unregister non-static metrics collectors registered in Prometheus default registry (#24257)

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 218c9c5612cef6130a6d7e3ca5396e0b3b678906
Author: Lari Hotari <lh...@users.noreply.github.com>
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 c05b269c4e2..dd7c74888af 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
@@ -815,6 +815,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;
+        }
+    }
 }