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

nkruber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git

commit d9f012746f5b8b36ebb416f70e9f5bac93538d5d
Author: Nico Kruber <n...@ververica.com>
AuthorDate: Mon Jun 24 13:33:49 2019 +0200

    [FLINK-12984][metrics] only call Histogram#getStatistics() once where 
possible
    
    In some occasions, Histogram#getStatistics() was called multiple times to
    retrieve different statistics. However, at least the dropwizard 
implementation
    has some constant overhead per call and we should maybe rather interpret 
this
    method as returning a point-in-time snapshot of the histogram in order to 
get
    consistent values when querying them.
---
 .../apache/flink/metrics/jmx/JMXReporterTest.java  | 22 ++++++++++++----------
 .../prometheus/AbstractPrometheusReporter.java     |  4 +++-
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git 
a/flink-metrics/flink-metrics-jmx/src/test/java/org/apache/flink/metrics/jmx/JMXReporterTest.java
 
b/flink-metrics/flink-metrics-jmx/src/test/java/org/apache/flink/metrics/jmx/JMXReporterTest.java
index 883b918..a3bd024 100644
--- 
a/flink-metrics/flink-metrics-jmx/src/test/java/org/apache/flink/metrics/jmx/JMXReporterTest.java
+++ 
b/flink-metrics/flink-metrics-jmx/src/test/java/org/apache/flink/metrics/jmx/JMXReporterTest.java
@@ -19,6 +19,7 @@
 package org.apache.flink.metrics.jmx;
 
 import org.apache.flink.metrics.Gauge;
+import org.apache.flink.metrics.HistogramStatistics;
 import org.apache.flink.metrics.reporter.MetricReporter;
 import org.apache.flink.metrics.util.TestHistogram;
 import org.apache.flink.metrics.util.TestMeter;
@@ -245,16 +246,17 @@ public class JMXReporterTest extends TestLogger {
                        assertEquals(11, attributeInfos.length);
 
                        assertEquals(histogram.getCount(), 
mBeanServer.getAttribute(objectName, "Count"));
-                       assertEquals(histogram.getStatistics().getMean(), 
mBeanServer.getAttribute(objectName, "Mean"));
-                       assertEquals(histogram.getStatistics().getStdDev(), 
mBeanServer.getAttribute(objectName, "StdDev"));
-                       assertEquals(histogram.getStatistics().getMax(), 
mBeanServer.getAttribute(objectName, "Max"));
-                       assertEquals(histogram.getStatistics().getMin(), 
mBeanServer.getAttribute(objectName, "Min"));
-                       
assertEquals(histogram.getStatistics().getQuantile(0.5), 
mBeanServer.getAttribute(objectName, "Median"));
-                       
assertEquals(histogram.getStatistics().getQuantile(0.75), 
mBeanServer.getAttribute(objectName, "75thPercentile"));
-                       
assertEquals(histogram.getStatistics().getQuantile(0.95), 
mBeanServer.getAttribute(objectName, "95thPercentile"));
-                       
assertEquals(histogram.getStatistics().getQuantile(0.98), 
mBeanServer.getAttribute(objectName, "98thPercentile"));
-                       
assertEquals(histogram.getStatistics().getQuantile(0.99), 
mBeanServer.getAttribute(objectName, "99thPercentile"));
-                       
assertEquals(histogram.getStatistics().getQuantile(0.999), 
mBeanServer.getAttribute(objectName, "999thPercentile"));
+                       HistogramStatistics statistics = 
histogram.getStatistics();
+                       assertEquals(statistics.getMean(), 
mBeanServer.getAttribute(objectName, "Mean"));
+                       assertEquals(statistics.getStdDev(), 
mBeanServer.getAttribute(objectName, "StdDev"));
+                       assertEquals(statistics.getMax(), 
mBeanServer.getAttribute(objectName, "Max"));
+                       assertEquals(statistics.getMin(), 
mBeanServer.getAttribute(objectName, "Min"));
+                       assertEquals(statistics.getQuantile(0.5), 
mBeanServer.getAttribute(objectName, "Median"));
+                       assertEquals(statistics.getQuantile(0.75), 
mBeanServer.getAttribute(objectName, "75thPercentile"));
+                       assertEquals(statistics.getQuantile(0.95), 
mBeanServer.getAttribute(objectName, "95thPercentile"));
+                       assertEquals(statistics.getQuantile(0.98), 
mBeanServer.getAttribute(objectName, "98thPercentile"));
+                       assertEquals(statistics.getQuantile(0.99), 
mBeanServer.getAttribute(objectName, "99thPercentile"));
+                       assertEquals(statistics.getQuantile(0.999), 
mBeanServer.getAttribute(objectName, "999thPercentile"));
 
                } finally {
                        if (registry != null) {
diff --git 
a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
 
b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
index 72bff5b..a6076ad 100644
--- 
a/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
+++ 
b/flink-metrics/flink-metrics-prometheus/src/main/java/org/apache/flink/metrics/prometheus/AbstractPrometheusReporter.java
@@ -24,6 +24,7 @@ import org.apache.flink.metrics.CharacterFilter;
 import org.apache.flink.metrics.Counter;
 import org.apache.flink.metrics.Gauge;
 import org.apache.flink.metrics.Histogram;
+import org.apache.flink.metrics.HistogramStatistics;
 import org.apache.flink.metrics.Meter;
 import org.apache.flink.metrics.Metric;
 import org.apache.flink.metrics.MetricConfig;
@@ -300,10 +301,11 @@ public abstract class AbstractPrometheusReporter 
implements MetricReporter {
                private void addSamples(final List<String> labelValues, final 
Histogram histogram, final List<MetricFamilySamples.Sample> samples) {
                        samples.add(new MetricFamilySamples.Sample(metricName + 
"_count",
                                labelNamesWithQuantile.subList(0, 
labelNamesWithQuantile.size() - 1), labelValues, histogram.getCount()));
+                       final HistogramStatistics statistics = 
histogram.getStatistics();
                        for (final Double quantile : QUANTILES) {
                                samples.add(new 
MetricFamilySamples.Sample(metricName, labelNamesWithQuantile,
                                        addToList(labelValues, 
quantile.toString()),
-                                       
histogram.getStatistics().getQuantile(quantile)));
+                                       statistics.getQuantile(quantile)));
                        }
                }
        }

Reply via email to