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 2019/06/14 02:03:38 UTC

[hbase] branch master updated: HBASE-22530 The metrics of store files count of region are returned to clients incorrectly (Eungsop Yoo)

This is an automated email from the ASF dual-hosted git repository.

apurtell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e15f4e  HBASE-22530 The metrics of store files count of region are returned to clients incorrectly (Eungsop Yoo)
8e15f4e is described below

commit 8e15f4ed61861488136495e6fcb08a5702e78783
Author: Andrew Purtell <ap...@apache.org>
AuthorDate: Thu Jun 13 17:42:26 2019 -0700

    HBASE-22530 The metrics of store files count of region are returned to clients incorrectly (Eungsop Yoo)
    
    Signed-off-by: Xu Cang <xu...@apache.org>
---
 .../apache/hadoop/hbase/RegionMetricsBuilder.java  |  2 +-
 .../org/apache/hadoop/hbase/TestRegionMetrics.java | 23 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
index 6bd0f05..acd493f 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java
@@ -111,7 +111,7 @@ public final class RegionMetricsBuilder {
         .setRootIndexSizeKB((int) regionMetrics.getStoreFileRootLevelIndexSize()
           .get(Size.Unit.KILOBYTE))
         .setStores(regionMetrics.getStoreCount())
-        .setStorefiles(regionMetrics.getStoreCount())
+        .setStorefiles(regionMetrics.getStoreFileCount())
         .setStoreRefCount(regionMetrics.getStoreRefCount())
         .setStorefileSizeMB((int) regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE))
         .addAllStoreCompleteSequenceId(toStoreSequenceId(regionMetrics.getStoreSequenceId()))
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionMetrics.java
index df57c49..49d8668 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionMetrics.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestRegionMetrics.java
@@ -20,6 +20,8 @@ package org.apache.hadoop.hbase;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.EnumSet;
@@ -130,6 +132,27 @@ public class TestRegionMetrics {
         regionMetrics.stream().map(r -> Bytes.toString(r.getRegionName())).
           collect(Collectors.toList()));
       assertEquals(serverMetrics.getRegionMetrics().size(), regionMetrics.size());
+      checkMetricsValue(regionMetrics, serverMetrics);
+    }
+  }
+
+  private void checkMetricsValue(List<RegionMetrics> regionMetrics, ServerMetrics serverMetrics)
+    throws InvocationTargetException, IllegalAccessException {
+    for (RegionMetrics fromRM : regionMetrics) {
+      RegionMetrics fromSM = serverMetrics.getRegionMetrics().get(fromRM.getRegionName());
+      Class clazz = RegionMetrics.class;
+      for (Method method : clazz.getMethods()) {
+        // check numeric values only
+        if (method.getReturnType().equals(Size.class)
+          || method.getReturnType().equals(int.class)
+          || method.getReturnType().equals(long.class)
+          || method.getReturnType().equals(float.class)) {
+          Object valueRm = method.invoke(fromRM);
+          Object valueSM = method.invoke(fromSM);
+          assertEquals("Return values of method " + method.getName() + " are different",
+              valueRm.toString(), valueSM.toString());
+        }
+      }
     }
   }