You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by ki...@apache.org on 2015/11/18 20:49:53 UTC

[2/4] storm git commit: Guard against both Infinity and NaN

Guard against both Infinity and NaN


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/a305c141
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/a305c141
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/a305c141

Branch: refs/heads/master
Commit: a305c141bdfc68964b55d2d760d01f48d3385873
Parents: 3857644
Author: Derek Dagit <de...@yahoo-inc.com>
Authored: Tue Nov 17 11:12:20 2015 -0600
Committer: Derek Dagit <de...@yahoo-inc.com>
Committed: Tue Nov 17 11:12:20 2015 -0600

----------------------------------------------------------------------
 storm-core/src/clj/backtype/storm/stats.clj          |  5 +++--
 .../storm/metric/internal/LatencyStatAndMetric.java  | 15 ++++++---------
 storm-core/src/jvm/backtype/storm/utils/Utils.java   |  4 ++++
 3 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/a305c141/storm-core/src/clj/backtype/storm/stats.clj
----------------------------------------------------------------------
diff --git a/storm-core/src/clj/backtype/storm/stats.clj b/storm-core/src/clj/backtype/storm/stats.clj
index cb77bb7..ea4efe4 100644
--- a/storm-core/src/clj/backtype/storm/stats.clj
+++ b/storm-core/src/clj/backtype/storm/stats.clj
@@ -288,10 +288,11 @@
       rate)))
 
 (defn valid-number?
-  "Returns true if x is a number that is not NaN, false otherwise"
+  "Returns true if x is a number that is not NaN or Infinity, false otherwise"
   [x]
   (and (number? x)
-       (not (Double/isNaN x))))
+       (not (Double/isNaN x))
+       (not (Double/isInfinite x))))
 
 (defn apply-default
   [f defaulting-fn & args]

http://git-wip-us.apache.org/repos/asf/storm/blob/a305c141/storm-core/src/jvm/backtype/storm/metric/internal/LatencyStatAndMetric.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/metric/internal/LatencyStatAndMetric.java b/storm-core/src/jvm/backtype/storm/metric/internal/LatencyStatAndMetric.java
index 8c472bd..614f95e 100644
--- a/storm-core/src/jvm/backtype/storm/metric/internal/LatencyStatAndMetric.java
+++ b/storm-core/src/jvm/backtype/storm/metric/internal/LatencyStatAndMetric.java
@@ -19,11 +19,10 @@ package backtype.storm.metric.internal;
 
 import java.util.Map;
 import java.util.HashMap;
-import java.util.Timer;
 import java.util.TimerTask;
-import java.util.concurrent.atomic.AtomicLong;
 
 import backtype.storm.metric.api.IMetric;
+import backtype.storm.utils.Utils;
 
 /**
  * Acts as a Latency Metric, but also keeps track of approximate latency
@@ -146,9 +145,8 @@ public class LatencyStatAndMetric implements IMetric {
 
         long timeSpent = now - _bucketStart;
         long exactExtraCountSum = count + _exactExtraCount;
-        double ret = exactExtraCountSum > 0 ?
-                ((double)(lat + _exactExtraLat))/exactExtraCountSum :
-                0.0;
+        double ret = Utils.zeroIfNaNOrInf(
+                ((double) (lat + _exactExtraLat)) / exactExtraCountSum);
         _bucketStart = now;
         _exactExtraLat = 0;
         _exactExtraCount = 0;
@@ -231,9 +229,8 @@ public class LatencyStatAndMetric implements IMetric {
         ret.put("10800", readApproximateLatAvg(lat, count, timeSpent, _thTime, _thLatBuckets, _thCountBuckets, 10800 * 1000));
         ret.put("86400", readApproximateLatAvg(lat, count, timeSpent, _odTime, _odLatBuckets, _odCountBuckets, 86400 * 1000));
         long allTimeCountSum = count + _allTimeCount;
-        ret.put(":all-time", allTimeCountSum > 0 ?
-                ((double)lat + _allTimeLat)/allTimeCountSum :
-                0.0);
+        ret.put(":all-time", Utils.zeroIfNaNOrInf(
+                (double) lat + _allTimeLat)/allTimeCountSum);
         return ret;
     }
 
@@ -248,7 +245,7 @@ public class LatencyStatAndMetric implements IMetric {
             totalCount += countBuckets[i];
             timeNeeded -= bucketTime[i];
         }
-        return totalCount > 0 ? ((double)totalLat)/totalCount : 0.0;
+        return Utils.zeroIfNaNOrInf(((double) totalLat) / totalCount);
     }
 
     public void close() {

http://git-wip-us.apache.org/repos/asf/storm/blob/a305c141/storm-core/src/jvm/backtype/storm/utils/Utils.java
----------------------------------------------------------------------
diff --git a/storm-core/src/jvm/backtype/storm/utils/Utils.java b/storm-core/src/jvm/backtype/storm/utils/Utils.java
index 8c100e1..00af367 100644
--- a/storm-core/src/jvm/backtype/storm/utils/Utils.java
+++ b/storm-core/src/jvm/backtype/storm/utils/Utils.java
@@ -760,5 +760,9 @@ public class Utils {
         raf.close();
         return val;
     }
+
+    public static double zeroIfNaNOrInf(double x) {
+        return (Double.isNaN(x) || Double.isInfinite(x)) ? 0.0 : x;
+    }
 }