You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2018/05/16 19:20:22 UTC

[1/3] hbase git commit: HBASE-20571 JMXJsonServlet generates invalid JSON if it has NaN in metrics

Repository: hbase
Updated Branches:
  refs/heads/branch-1 2a309d71c -> 2d493556f
  refs/heads/branch-1.3 8491967f0 -> 2ea2eedda
  refs/heads/branch-1.4 7e65dfaf4 -> cfdc9d134


HBASE-20571 JMXJsonServlet generates invalid JSON if it has NaN in metrics

- CacheStats won't generate NaN metrics.
- JSONBean class will serialize special floating point values as
  "NaN", "Infinity" or "-Infinity"

Signed-off-by: Andrew Purtell <ap...@apache.org>


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

Branch: refs/heads/branch-1
Commit: 2d493556f3c8ae87fb92422b525bf7c9345e6ccd
Parents: 2a309d7
Author: Balazs Meszaros <ba...@cloudera.com>
Authored: Fri May 11 16:30:38 2018 +0200
Committer: Andrew Purtell <ap...@apache.org>
Committed: Wed May 16 11:50:31 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/io/hfile/CacheStats.java       | 42 +++++++++++++++++---
 .../org/apache/hadoop/hbase/util/JSONBean.java  |  7 +++-
 2 files changed, 42 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/2d493556/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
index 9249271..2c155f8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
@@ -41,7 +41,7 @@ public class CacheStats {
 
   /** The number of getBlock requests that were cache hits from primary replica */
   private final Counter primaryHitCount = new Counter();
-  
+
   /**
    * The number of getBlock requests that were cache hits, but only from
    * requests that were set to use the block cache.  This is because all reads
@@ -387,23 +387,53 @@ public class CacheStats {
   }
 
   public double getHitRatio() {
-    return ((float)getHitCount()/(float)getRequestCount());
+    double requestCount = getRequestCount();
+
+    if (requestCount == 0) {
+      return 0;
+    }
+
+    return getHitCount() / requestCount;
   }
 
   public double getHitCachingRatio() {
-    return ((float)getHitCachingCount()/(float)getRequestCachingCount());
+    double requestCachingCount = getRequestCachingCount();
+
+    if (requestCachingCount == 0) {
+      return 0;
+    }
+
+    return getHitCachingCount() / requestCachingCount;
   }
 
   public double getMissRatio() {
-    return ((float)getMissCount()/(float)getRequestCount());
+    double requestCount = getRequestCount();
+
+    if (requestCount == 0) {
+      return 0;
+    }
+
+    return getMissCount() / requestCount;
   }
 
   public double getMissCachingRatio() {
-    return ((float)getMissCachingCount()/(float)getRequestCachingCount());
+    double requestCachingCount = getRequestCachingCount();
+
+    if (requestCachingCount == 0) {
+      return 0;
+    }
+
+    return getMissCachingCount() / requestCachingCount;
   }
 
   public double evictedPerEviction() {
-    return ((float)getEvictedCount()/(float)getEvictionCount());
+    double evictionCount = getEvictionCount();
+
+    if (evictionCount == 0) {
+      return 0;
+    }
+
+    return getEvictedCount() / evictionCount;
   }
 
   public long getFailedInserts() {

http://git-wip-us.apache.org/repos/asf/hbase/blob/2d493556/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
index a05d7cf..5864a7d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
@@ -317,7 +317,12 @@ public class JSONBean {
         jg.writeEndArray();
       } else if(value instanceof Number) {
         Number n = (Number)value;
-        jg.writeNumber(n.toString());
+        double doubleValue = n.doubleValue();
+        if (Double.isNaN(doubleValue) || Double.isInfinite(doubleValue)) {
+          jg.writeString(n.toString());
+        } else {
+          jg.writeNumber(n.toString());
+        }
       } else if(value instanceof Boolean) {
         Boolean b = (Boolean)value;
         jg.writeBoolean(b);


[3/3] hbase git commit: HBASE-20571 JMXJsonServlet generates invalid JSON if it has NaN in metrics

Posted by ap...@apache.org.
HBASE-20571 JMXJsonServlet generates invalid JSON if it has NaN in metrics

- CacheStats won't generate NaN metrics.
- JSONBean class will serialize special floating point values as
  "NaN", "Infinity" or "-Infinity"

Signed-off-by: Andrew Purtell <ap...@apache.org>


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

Branch: refs/heads/branch-1.3
Commit: 2ea2eedda86eea9db5797cf2444f56ddb5e8b168
Parents: 8491967
Author: Balazs Meszaros <ba...@cloudera.com>
Authored: Fri May 11 16:30:38 2018 +0200
Committer: Andrew Purtell <ap...@apache.org>
Committed: Wed May 16 11:50:45 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/io/hfile/CacheStats.java       | 42 +++++++++++++++++---
 .../org/apache/hadoop/hbase/util/JSONBean.java  |  7 +++-
 2 files changed, 42 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/2ea2eedd/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
index 298dcf7..3ad79f8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
@@ -41,7 +41,7 @@ public class CacheStats {
 
   /** The number of getBlock requests that were cache hits from primary replica */
   private final Counter primaryHitCount = new Counter();
-  
+
   /**
    * The number of getBlock requests that were cache hits, but only from
    * requests that were set to use the block cache.  This is because all reads
@@ -385,23 +385,53 @@ public class CacheStats {
   }
 
   public double getHitRatio() {
-    return ((float)getHitCount()/(float)getRequestCount());
+    double requestCount = getRequestCount();
+
+    if (requestCount == 0) {
+      return 0;
+    }
+
+    return getHitCount() / requestCount;
   }
 
   public double getHitCachingRatio() {
-    return ((float)getHitCachingCount()/(float)getRequestCachingCount());
+    double requestCachingCount = getRequestCachingCount();
+
+    if (requestCachingCount == 0) {
+      return 0;
+    }
+
+    return getHitCachingCount() / requestCachingCount;
   }
 
   public double getMissRatio() {
-    return ((float)getMissCount()/(float)getRequestCount());
+    double requestCount = getRequestCount();
+
+    if (requestCount == 0) {
+      return 0;
+    }
+
+    return getMissCount() / requestCount;
   }
 
   public double getMissCachingRatio() {
-    return ((float)getMissCachingCount()/(float)getRequestCachingCount());
+    double requestCachingCount = getRequestCachingCount();
+
+    if (requestCachingCount == 0) {
+      return 0;
+    }
+
+    return getMissCachingCount() / requestCachingCount;
   }
 
   public double evictedPerEviction() {
-    return ((float)getEvictedCount()/(float)getEvictionCount());
+    double evictionCount = getEvictionCount();
+
+    if (evictionCount == 0) {
+      return 0;
+    }
+
+    return getEvictedCount() / evictionCount;
   }
 
   public long getFailedInserts() {

http://git-wip-us.apache.org/repos/asf/hbase/blob/2ea2eedd/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
index 0739e91..7b5aa54 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
@@ -314,7 +314,12 @@ public class JSONBean {
         jg.writeEndArray();
       } else if(value instanceof Number) {
         Number n = (Number)value;
-        jg.writeNumber(n.toString());
+        double doubleValue = n.doubleValue();
+        if (Double.isNaN(doubleValue) || Double.isInfinite(doubleValue)) {
+          jg.writeString(n.toString());
+        } else {
+          jg.writeNumber(n.toString());
+        }
       } else if(value instanceof Boolean) {
         Boolean b = (Boolean)value;
         jg.writeBoolean(b);


[2/3] hbase git commit: HBASE-20571 JMXJsonServlet generates invalid JSON if it has NaN in metrics

Posted by ap...@apache.org.
HBASE-20571 JMXJsonServlet generates invalid JSON if it has NaN in metrics

- CacheStats won't generate NaN metrics.
- JSONBean class will serialize special floating point values as
  "NaN", "Infinity" or "-Infinity"

Signed-off-by: Andrew Purtell <ap...@apache.org>


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

Branch: refs/heads/branch-1.4
Commit: cfdc9d1348f3374c452bb2fe647709ff04c20ff9
Parents: 7e65dfa
Author: Balazs Meszaros <ba...@cloudera.com>
Authored: Fri May 11 16:30:38 2018 +0200
Committer: Andrew Purtell <ap...@apache.org>
Committed: Wed May 16 11:50:40 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/io/hfile/CacheStats.java       | 42 +++++++++++++++++---
 .../org/apache/hadoop/hbase/util/JSONBean.java  |  7 +++-
 2 files changed, 42 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/cfdc9d13/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
index 9249271..2c155f8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheStats.java
@@ -41,7 +41,7 @@ public class CacheStats {
 
   /** The number of getBlock requests that were cache hits from primary replica */
   private final Counter primaryHitCount = new Counter();
-  
+
   /**
    * The number of getBlock requests that were cache hits, but only from
    * requests that were set to use the block cache.  This is because all reads
@@ -387,23 +387,53 @@ public class CacheStats {
   }
 
   public double getHitRatio() {
-    return ((float)getHitCount()/(float)getRequestCount());
+    double requestCount = getRequestCount();
+
+    if (requestCount == 0) {
+      return 0;
+    }
+
+    return getHitCount() / requestCount;
   }
 
   public double getHitCachingRatio() {
-    return ((float)getHitCachingCount()/(float)getRequestCachingCount());
+    double requestCachingCount = getRequestCachingCount();
+
+    if (requestCachingCount == 0) {
+      return 0;
+    }
+
+    return getHitCachingCount() / requestCachingCount;
   }
 
   public double getMissRatio() {
-    return ((float)getMissCount()/(float)getRequestCount());
+    double requestCount = getRequestCount();
+
+    if (requestCount == 0) {
+      return 0;
+    }
+
+    return getMissCount() / requestCount;
   }
 
   public double getMissCachingRatio() {
-    return ((float)getMissCachingCount()/(float)getRequestCachingCount());
+    double requestCachingCount = getRequestCachingCount();
+
+    if (requestCachingCount == 0) {
+      return 0;
+    }
+
+    return getMissCachingCount() / requestCachingCount;
   }
 
   public double evictedPerEviction() {
-    return ((float)getEvictedCount()/(float)getEvictionCount());
+    double evictionCount = getEvictionCount();
+
+    if (evictionCount == 0) {
+      return 0;
+    }
+
+    return getEvictedCount() / evictionCount;
   }
 
   public long getFailedInserts() {

http://git-wip-us.apache.org/repos/asf/hbase/blob/cfdc9d13/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
index a05d7cf..5864a7d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/JSONBean.java
@@ -317,7 +317,12 @@ public class JSONBean {
         jg.writeEndArray();
       } else if(value instanceof Number) {
         Number n = (Number)value;
-        jg.writeNumber(n.toString());
+        double doubleValue = n.doubleValue();
+        if (Double.isNaN(doubleValue) || Double.isInfinite(doubleValue)) {
+          jg.writeString(n.toString());
+        } else {
+          jg.writeNumber(n.toString());
+        }
       } else if(value instanceof Boolean) {
         Boolean b = (Boolean)value;
         jg.writeBoolean(b);