Skip to content

Commit 9cf821d

Browse files
authored
[fix][broker] Unregister non-static metrics collectors registered in Prometheus default registry (apache#24257)
1 parent c807580 commit 9cf821d

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

pulsar-broker/src/main/java/org/apache/pulsar/broker/service/BrokerService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,10 @@ public CompletableFuture<Void> closeAsync() {
815815
try {
816816
log.info("Shutting down Pulsar Broker service");
817817

818+
// unregister non-static metrics collectors
819+
pendingTopicLoadRequests.unregister();
820+
pendingLookupRequests.unregister();
821+
818822
// unloads all namespaces gracefully without disrupting mutually
819823
unloadNamespaceBundlesGracefully();
820824

pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/ObserverGauge.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.pulsar.broker.stats.prometheus.metrics;
2020

2121
import io.prometheus.client.Collector;
22+
import io.prometheus.client.CollectorRegistry;
2223
import io.prometheus.client.GaugeMetricFamily;
2324
import io.prometheus.client.SimpleCollector;
2425
import java.util.ArrayList;
@@ -39,9 +40,11 @@ public Builder supplier(Supplier<Number> supplier) {
3940
return this;
4041
}
4142

42-
public ObserverGauge register() {
43+
public ObserverGauge register(CollectorRegistry registry) {
4344
try {
44-
return super.register();
45+
ObserverGauge instance = super.register(registry);
46+
instance.setRegistry(registry);
47+
return instance;
4548
} catch (Exception e) {
4649
// Handle double registration errors in tests
4750
return create();
@@ -71,6 +74,7 @@ public static Builder build() {
7174
}
7275

7376
private final Supplier<Number> supplier;
77+
private volatile CollectorRegistry registry;
7478

7579
private ObserverGauge(Builder builder) {
7680
super(builder);
@@ -99,4 +103,15 @@ public List<MetricFamilySamples> collect() {
99103
public List<MetricFamilySamples> describe() {
100104
return Collections.singletonList(new GaugeMetricFamily(fullname, help, labelNames));
101105
}
106+
107+
protected void setRegistry(CollectorRegistry registry) {
108+
this.registry = registry;
109+
}
110+
111+
public void unregister() {
112+
if (registry != null) {
113+
registry.unregister(this);
114+
registry = null;
115+
}
116+
}
102117
}

0 commit comments

Comments
 (0)