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)));
}
}
}