You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by si...@apache.org on 2018/01/30 20:04:55 UTC

[bookkeeper] branch branch-4.6 updated: ISSUE #1078: use CachingStatsProvider underly PrometheusMetricsProvider

This is an automated email from the ASF dual-hosted git repository.

sijie pushed a commit to branch branch-4.6
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/branch-4.6 by this push:
     new 3ffae0d  ISSUE #1078: use CachingStatsProvider underly PrometheusMetricsProvider
3ffae0d is described below

commit 3ffae0de55c02c5fd7cffb1cda03fcd8f0c9d3ce
Author: Jia Zhai <zh...@apache.org>
AuthorDate: Tue Jan 30 12:04:30 2018 -0800

    ISSUE #1078: use CachingStatsProvider underly PrometheusMetricsProvider
    
    Descriptions of the changes in this PR:
    - add CachingStatsProvider to wrapper PrometheusMetricsProvider;
    - add test verify the cache.
    
    Master Issue: #1078
    
    Author: Jia Zhai <zh...@apache.org>
    
    Reviewers: Sijie Guo <si...@apache.org>, Matteo Merli <mm...@apache.org>
    
    This closes #1081 from jiazhai/issue-1078, closes #1078
    
    (cherry picked from commit d5dffc48a4eda6178bd25610097f2e49763f2377)
    Signed-off-by: Sijie Guo <si...@apache.org>
---
 .../prometheus/PrometheusMetricsProvider.java      | 25 +++++++++++++++++++++-
 .../prometheus/TestPrometheusMetricsProvider.java  | 23 ++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java b/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java
index 6c84dea..4008c04 100644
--- a/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java
+++ b/bookkeeper-stats-providers/prometheus-metrics-provider/src/main/java/org/apache/bookkeeper/stats/prometheus/PrometheusMetricsProvider.java
@@ -23,6 +23,7 @@ import io.prometheus.client.hotspot.MemoryPoolsExports;
 import io.prometheus.client.hotspot.StandardExports;
 import io.prometheus.client.hotspot.ThreadExports;
 import java.net.InetSocketAddress;
+import org.apache.bookkeeper.stats.CachingStatsProvider;
 import org.apache.bookkeeper.stats.StatsLogger;
 import org.apache.bookkeeper.stats.StatsProvider;
 import org.apache.commons.configuration.Configuration;
@@ -39,6 +40,28 @@ public class PrometheusMetricsProvider implements StatsProvider {
 
     private final CollectorRegistry registry = new CollectorRegistry();
     private Server server;
+    private final CachingStatsProvider cachingStatsProvider;
+
+    public PrometheusMetricsProvider() {
+        this.cachingStatsProvider = new CachingStatsProvider(
+            new StatsProvider() {
+                @Override
+                public void start(Configuration conf) {
+                    // nop
+                }
+
+                @Override
+                public void stop() {
+                    // nop
+                }
+
+                @Override
+                public StatsLogger getStatsLogger(String scope) {
+                    return new PrometheusStatsLogger(registry, scope);
+                }
+            }
+        );
+    }
 
     @Override
     public void start(Configuration conf) {
@@ -79,7 +102,7 @@ public class PrometheusMetricsProvider implements StatsProvider {
 
     @Override
     public StatsLogger getStatsLogger(String scope) {
-        return new PrometheusStatsLogger(registry, scope);
+        return this.cachingStatsProvider.getStatsLogger(scope);
     }
 
     private static final Logger log = LoggerFactory.getLogger(PrometheusMetricsProvider.class);
diff --git a/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java b/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java
index e90ccee..84ad5f4 100644
--- a/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java
+++ b/bookkeeper-stats-providers/prometheus-metrics-provider/src/test/java/org/apache/bookkeeper/stats/prometheus/TestPrometheusMetricsProvider.java
@@ -17,11 +17,15 @@
 package org.apache.bookkeeper.stats.prometheus;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
 
 import io.prometheus.client.Collector;
 import io.prometheus.client.CollectorRegistry;
 import java.lang.reflect.Field;
 import java.util.Map;
+import org.apache.bookkeeper.stats.Counter;
+import org.apache.bookkeeper.stats.OpStatsLogger;
+import org.apache.bookkeeper.stats.StatsLogger;
 import org.junit.Test;
 
 public class TestPrometheusMetricsProvider {
@@ -29,6 +33,25 @@ public class TestPrometheusMetricsProvider {
     private final CollectorRegistry registry = new CollectorRegistry();
 
     @Test
+    public void testCache() {
+        PrometheusMetricsProvider provider = new PrometheusMetricsProvider();
+
+        StatsLogger statsLogger =  provider.getStatsLogger("test");
+
+        OpStatsLogger opStatsLogger1 = statsLogger.getOpStatsLogger("optest");
+        OpStatsLogger opStatsLogger2 = statsLogger.getOpStatsLogger("optest");
+        assertSame(opStatsLogger1, opStatsLogger2);
+
+        Counter counter1 = statsLogger.getCounter("countertest");
+        Counter counter2 = statsLogger.getCounter("countertest");
+        assertSame(counter1, counter2);
+
+        StatsLogger scope1 = statsLogger.scope("scopetest");
+        StatsLogger scope2 = statsLogger.scope("scopetest");
+        assertSame(scope1, scope2);
+    }
+
+    @Test
     public void testCounter() {
         PrometheusCounter counter = new PrometheusCounter(registry, "testcounter");
         long value = counter.get();

-- 
To stop receiving notification emails like this one, please contact
sijie@apache.org.