io.grpc
diff --git a/pulsar-broker-shaded/pom.xml b/pulsar-broker-shaded/pom.xml
index 3da5849e87b2b..d6b2e625518b4 100644
--- a/pulsar-broker-shaded/pom.xml
+++ b/pulsar-broker-shaded/pom.xml
@@ -82,6 +82,7 @@
net.java.dev.jna:*
com.carrotsearch:*
io.prometheus:*
+ io.perfmark:*
com.github.ben-manes.caffeine:*
org.glassfish.jersey.*:*
org.rocksdb:*
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesOpStatsLogger.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesOpStatsLogger.java
index 3ef453ddc654e..2dcfb10247100 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesOpStatsLogger.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesOpStatsLogger.java
@@ -55,7 +55,7 @@ public class DataSketchesOpStatsLogger implements OpStatsLogger {
private final LongAdder successSumAdder = new LongAdder();
private final LongAdder failSumAdder = new LongAdder();
- DataSketchesOpStatsLogger() {
+ public DataSketchesOpStatsLogger() {
this.current = new ThreadLocalAccessor();
this.replacement = new ThreadLocalAccessor();
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesSummaryLogger.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesSummaryLogger.java
index 96e7bd2fec59f..0ef11d8e37483 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesSummaryLogger.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/DataSketchesSummaryLogger.java
@@ -46,7 +46,7 @@ public class DataSketchesSummaryLogger {
private final LongAdder countAdder = new LongAdder();
private final LongAdder sumAdder = new LongAdder();
- DataSketchesSummaryLogger() {
+ public DataSketchesSummaryLogger() {
this.current = new ThreadLocalAccessor();
this.replacement = new ThreadLocalAccessor();
}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/LongAdderCounter.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/LongAdderCounter.java
new file mode 100644
index 0000000000000..39be12b35509b
--- /dev/null
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/LongAdderCounter.java
@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pulsar.broker.stats.prometheus.metrics;
+
+import java.util.concurrent.atomic.LongAdder;
+import org.apache.bookkeeper.stats.Counter;
+
+/**
+ * {@link Counter} implementation based on {@link LongAdder}.
+ *
+ * LongAdder keeps a counter per-thread and then aggregates to get the result, in order to avoid contention between
+ * multiple threads.
+ */
+public class LongAdderCounter implements Counter {
+ private final LongAdder counter = new LongAdder();
+
+ public LongAdderCounter() {
+
+ }
+
+ @Override
+ public void clear() {
+ counter.reset();
+ }
+
+ @Override
+ public void inc() {
+ counter.increment();
+ }
+
+ @Override
+ public void dec() {
+ counter.decrement();
+ }
+
+ @Override
+ public void add(long delta) {
+ counter.add(delta);
+ }
+
+ @Override
+ public Long get() {
+ return counter.sum();
+ }
+}
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 8cc7ff3c04963..93f39c802ce9a 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
@@ -33,6 +33,8 @@ public class ObserverGauge extends SimpleCollector implemen
public static class Builder extends SimpleCollector.Builder {
private Supplier supplier;
+ public Builder() {}
+
public Builder supplier(Supplier supplier) {
this.supplier = supplier;
return this;
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java
index e05c6c43326cc..9fed5a31c2950 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusMetricsProvider.java
@@ -53,9 +53,9 @@ public class PrometheusMetricsProvider implements StatsProvider {
/**
* These acts a registry of the metrics defined in this provider
*/
- final ConcurrentMap counters = new ConcurrentSkipListMap<>();
- final ConcurrentMap> gauges = new ConcurrentSkipListMap<>();
- final ConcurrentMap opStats = new ConcurrentSkipListMap<>();
+ public final ConcurrentMap counters = new ConcurrentSkipListMap<>();
+ public final ConcurrentMap> gauges = new ConcurrentSkipListMap<>();
+ public final ConcurrentMap opStats = new ConcurrentSkipListMap<>();
public PrometheusMetricsProvider() {
this.cachingStatsProvider = new CachingStatsProvider(new StatsProvider() {
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusStatsLogger.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusStatsLogger.java
index ad3c62f78d731..ca016b05500a7 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusStatsLogger.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusStatsLogger.java
@@ -26,6 +26,8 @@
import org.apache.bookkeeper.stats.StatsLogger;
import org.apache.bookkeeper.stats.prometheus.LongAdderCounter;
+import java.util.HashMap;
+
/**
* A {@code Prometheus} based {@link StatsLogger} implementation.
*/
@@ -34,7 +36,7 @@ public class PrometheusStatsLogger implements StatsLogger {
private final PrometheusMetricsProvider provider;
private final String scope;
- PrometheusStatsLogger(PrometheusMetricsProvider provider, String scope) {
+ public PrometheusStatsLogger(PrometheusMetricsProvider provider, String scope) {
this.provider = provider;
this.scope = scope;
}
@@ -46,7 +48,7 @@ public OpStatsLogger getOpStatsLogger(String name) {
@Override
public Counter getCounter(String name) {
- return provider.counters.computeIfAbsent(completeName(name), x -> new LongAdderCounter());
+ return provider.counters.computeIfAbsent(completeName(name), x -> new LongAdderCounter(new HashMap<>()));
}
@Override
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java
index abe0b560aa746..0f9a4c86924fb 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/PrometheusTextFormatUtil.java
@@ -128,7 +128,8 @@ private static void writeSum(Writer w, DataSketchesOpStatsLogger opStat, String
.append(Double.toString(opStat.getSum(success))).append('\n');
}
- static void writeMetricsCollectedByPrometheusClient(Writer w, CollectorRegistry registry) throws IOException {
+ public static void writeMetricsCollectedByPrometheusClient(Writer w, CollectorRegistry registry)
+ throws IOException {
Enumeration metricFamilySamples = registry.metricFamilySamples();
while (metricFamilySamples.hasMoreElements()) {
MetricFamilySamples metricFamily = metricFamilySamples.nextElement();
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/SimpleGauge.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/SimpleGauge.java
index a93a26c1bd1e6..612168a2d9143 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/SimpleGauge.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/metrics/SimpleGauge.java
@@ -31,7 +31,7 @@ public SimpleGauge(final Gauge gauge) {
this.gauge = gauge;
}
- Number getSample() {
+ public Number getSample() {
return gauge.getSample();
}
}
diff --git a/pulsar-client-admin-shaded/pom.xml b/pulsar-client-admin-shaded/pom.xml
index 064545f60ae44..5778c288cdb1c 100644
--- a/pulsar-client-admin-shaded/pom.xml
+++ b/pulsar-client-admin-shaded/pom.xml
@@ -87,6 +87,7 @@
org.glassfish.hk2*:*
com.fasterxml.jackson.*:*
io.grpc:*
+ io.perfmark:*
com.yahoo.datasketches:*
com.squareup.*:*
com.google.*:*
diff --git a/pulsar-client-all/pom.xml b/pulsar-client-all/pom.xml
index 1d035f5dd3df3..cd434b77d3a54 100644
--- a/pulsar-client-all/pom.xml
+++ b/pulsar-client-all/pom.xml
@@ -134,6 +134,7 @@
org.glassfish.hk2*:*
com.fasterxml.jackson.*:*
io.grpc:*
+ io.perfmark:*
com.yahoo.datasketches:*
io.netty:*
com.squareup.*:*
diff --git a/pulsar-client-shaded/pom.xml b/pulsar-client-shaded/pom.xml
index 01e78b64da064..6dd187726dd4f 100644
--- a/pulsar-client-shaded/pom.xml
+++ b/pulsar-client-shaded/pom.xml
@@ -123,6 +123,7 @@
com.fasterxml.jackson.core:jackson-core
com.fasterxml.jackson.dataformat
io.netty:*
+ io.perfmark:*
org.eclipse.jetty:*
com.yahoo.datasketches:*
commons-*:*
diff --git a/pulsar-functions/instance/pom.xml b/pulsar-functions/instance/pom.xml
index 1c12aa09e85ab..9214757d824af 100644
--- a/pulsar-functions/instance/pom.xml
+++ b/pulsar-functions/instance/pom.xml
@@ -109,6 +109,12 @@
grpc-all
+