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

Reply via email to