[hotfix] [metrics] Prevent concurrency issues in MeterView
Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/62192c78 Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/62192c78 Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/62192c78 Branch: refs/heads/master Commit: 62192c78372d71f0e2ffe335e9344f03e78d5b61 Parents: 57208e6 Author: zentol <[email protected]> Authored: Mon Nov 14 15:58:56 2016 +0100 Committer: zentol <[email protected]> Committed: Mon Nov 14 15:58:56 2016 +0100 ---------------------------------------------------------------------- .../java/org/apache/flink/metrics/MeterView.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/62192c78/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MeterView.java ---------------------------------------------------------------------- diff --git a/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MeterView.java b/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MeterView.java index 40dd39f..b87b983 100644 --- a/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MeterView.java +++ b/flink-metrics/flink-metrics-core/src/main/java/org/apache/flink/metrics/MeterView.java @@ -22,12 +22,12 @@ package org.apache.flink.metrics; * * The primary advantage of this class is that the rate is neither updated by the computing thread nor for every event. * Instead, a history of counts is maintained that is updated in regular intervals by a background thread. From this - * history a rate is derived on demand, which represents the average rate of events over the given time span. If the - * rate is never requested there is thus no overhead for the computation of the rate. + * history a rate is derived on demand, which represents the average rate of events over the given time span. * * Setting the time span to a low value reduces memory-consumption and will more accurately report short-term changes. * The minimum value possible is {@link View#UPDATE_INTERVAL_SECONDS}. - * A high value in turn increases memory-consumption since a longer history has to be maintained. + * A high value in turn increases memory-consumption, since a longer history has to be maintained, but will result in + * smoother transitions between rates. * * The events are counted by a {@link Counter}. */ @@ -40,9 +40,6 @@ public class MeterView implements Meter, View { private final long[] values; /** The index in the array for the current time */ private int time = 0; - - /** Signals whether a rate was already calculated for the current time-frame */ - private boolean updateRate = false; /** The last rate we computed */ private double currentRate = 0; @@ -73,11 +70,6 @@ public class MeterView implements Meter, View { @Override public double getRate() { - if (updateRate) { - final int time = this.time; - currentRate = ((double) (values[time] - values[(time + 1) % values.length]) / timeSpanInSeconds); - updateRate = false; - } return currentRate; } @@ -85,6 +77,6 @@ public class MeterView implements Meter, View { public void update() { time = (time + 1) % values.length; values[time] = counter.getCount(); - updateRate = true; + currentRate = ((double) (values[time] - values[(time + 1) % values.length]) / timeSpanInSeconds); } }
