You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by nk...@apache.org on 2019/08/15 23:06:06 UTC

[flink] 01/02: [FLINK-12984][metrics] only call Histogram#getStatistics() once where possible

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 <ni...@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)));
 			}
 		}
 	}