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