Repository: hbase
Updated Branches:
  refs/heads/branch-1 d0bd4903c -> 934c0274e
  refs/heads/branch-1.3 e800f048a -> 5ff551754
  refs/heads/master 8fcc1e8e9 -> 51259fe4a


HBASE-15377 Per-RS Get metric is time based, per-region metric is size-based 
(Heng Chen)


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

Branch: refs/heads/master
Commit: 51259fe4a5357fadbd4b031c924c965951b3b7cf
Parents: 8fcc1e8
Author: Enis Soztutar <[email protected]>
Authored: Tue Mar 15 11:22:18 2016 -0700
Committer: Enis Soztutar <[email protected]>
Committed: Tue Mar 15 11:22:18 2016 -0700

----------------------------------------------------------------------
 .../regionserver/MetricsRegionServerSource.java |  1 +
 .../hbase/regionserver/MetricsRegionSource.java |  8 +++-
 .../regionserver/MetricsRegionSourceImpl.java   | 16 ++++++-
 .../hadoop/hbase/regionserver/HRegion.java      |  9 ++--
 .../hbase/regionserver/MetricsRegion.java       |  8 +++-
 .../hbase/regionserver/RSRpcServices.java       |  4 +-
 .../regionserver/TestRegionServerMetrics.java   | 46 ++++++++++++++++++++
 7 files changed, 81 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
----------------------------------------------------------------------
diff --git 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
index 18a77f4..ee3e847 100644
--- 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
+++ 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java
@@ -258,6 +258,7 @@ public interface MetricsRegionServerSource extends 
BaseSource {
   String UPDATES_BLOCKED_DESC =
       "Number of MS updates have been blocked so that the memstore can be 
flushed.";
   String DELETE_KEY = "delete";
+  String GET_SIZE_KEY = "getSize";
   String GET_KEY = "get";
   String INCREMENT_KEY = "increment";
   String MUTATE_KEY = "mutate";

http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
----------------------------------------------------------------------
diff --git 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
index 11fc068..8dc7e11 100644
--- 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
+++ 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSource.java
@@ -59,7 +59,13 @@ public interface MetricsRegionSource extends 
Comparable<MetricsRegionSource> {
    * Update count and sizes of gets.
    * @param getSize size in bytes of the resulting key values for a get
    */
-  void updateGet(long getSize);
+  void updateGetSize(long getSize);
+
+  /**
+   * Update time of gets
+   * @param mills time for this get operation.
+   */
+  void updateGet(long mills);
 
   /**
    * Update the count and sizes of resultScanner.next()

http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
----------------------------------------------------------------------
diff --git 
a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
 
b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
index 39d665b..05f1126 100644
--- 
a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
+++ 
b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
@@ -48,6 +48,7 @@ public class MetricsRegionSourceImpl implements 
MetricsRegionSource {
   private final String regionNamePrefix;
   private final String regionPutKey;
   private final String regionDeleteKey;
+  private final String regionGetSizeKey;
   private final String regionGetKey;
   private final String regionIncrementKey;
   private final String regionAppendKey;
@@ -58,6 +59,7 @@ public class MetricsRegionSourceImpl implements 
MetricsRegionSource {
   private final MutableFastCounter regionDelete;
   private final MutableFastCounter regionIncrement;
   private final MutableFastCounter regionAppend;
+  private final MetricHistogram regionGetSize;
   private final MetricHistogram regionGet;
   private final MetricHistogram regionScanSize;
   private final MetricHistogram regionScanTime;
@@ -93,6 +95,9 @@ public class MetricsRegionSourceImpl implements 
MetricsRegionSource {
     regionAppendKey = regionNamePrefix + MetricsRegionServerSource.APPEND_KEY 
+ suffix;
     regionAppend = registry.getCounter(regionAppendKey, 0L);
 
+    regionGetSizeKey = regionNamePrefix + 
MetricsRegionServerSource.GET_SIZE_KEY;
+    regionGetSize = registry.newSizeHistogram(regionGetSizeKey);
+
     regionGetKey = regionNamePrefix + MetricsRegionServerSource.GET_KEY;
     regionGet = registry.newTimeHistogram(regionGetKey);
 
@@ -129,9 +134,11 @@ public class MetricsRegionSourceImpl implements 
MetricsRegionSource {
       registry.removeMetric(regionDeleteKey);
       registry.removeMetric(regionIncrementKey);
       registry.removeMetric(regionAppendKey);
+      registry.removeMetric(regionGetSizeKey);
       registry.removeMetric(regionGetKey);
       registry.removeMetric(regionScanSizeKey);
       registry.removeMetric(regionScanTimeKey);
+      registry.removeHistogramMetrics(regionGetSizeKey);
       registry.removeHistogramMetrics(regionGetKey);
       registry.removeHistogramMetrics(regionScanSizeKey);
       registry.removeHistogramMetrics(regionScanTimeKey);
@@ -151,8 +158,13 @@ public class MetricsRegionSourceImpl implements 
MetricsRegionSource {
   }
 
   @Override
-  public void updateGet(long getSize) {
-    regionGet.add(getSize);
+  public void updateGetSize(long getSize) {
+    regionGetSize.add(getSize);
+  }
+
+  @Override
+  public void updateGet(long mills) {
+    regionGet.add(mills);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index d20b478..ed91234 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -6702,7 +6702,7 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
         return results;
       }
     }
-
+    long before =  EnvironmentEdgeManager.currentTime();
     Scan scan = new Scan(get);
 
     RegionScanner scanner = null;
@@ -6719,12 +6719,12 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
       coprocessorHost.postGet(get, results);
     }
 
-    metricsUpdateForGet(results);
+    metricsUpdateForGet(results, before);
 
     return results;
   }
 
-  void metricsUpdateForGet(List<Cell> results) {
+  void metricsUpdateForGet(List<Cell> results, long before) {
     if (this.metricsRegion != null) {
       long totalSize = 0L;
       for (Cell cell : results) {
@@ -6732,7 +6732,8 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
         // to know the serialization of how the codec works with it??
         totalSize += CellUtil.estimatedSerializedSizeOf(cell);
       }
-      this.metricsRegion.updateGet(totalSize);
+      this.metricsRegion.updateGetSize(totalSize);
+      this.metricsRegion.updateGet(EnvironmentEdgeManager.currentTime() - 
before);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
index 56839ff..94be034 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegion.java
@@ -49,8 +49,12 @@ public class MetricsRegion {
     source.updateDelete();
   }
 
-  public void updateGet(final long getSize) {
-    source.updateGet(getSize);
+  public void updateGetSize(final long getSize) {
+    source.updateGetSize(getSize);
+  }
+
+  public void updateGet(final long t) {
+    source.updateGet(t);
   }
 
   public void updateScanSize(final long scanSize) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
index 035b2d1..f4a2574 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
@@ -2197,7 +2197,7 @@ public class RSRpcServices implements 
HBaseRPCErrorHandler,
             .create(results, get.isCheckExistenceOnly() ? !results.isEmpty() : 
null, stale);
       }
     }
-
+    long before = EnvironmentEdgeManager.currentTime();
     Scan scan = new Scan(get);
 
     RegionScanner scanner = null;
@@ -2227,7 +2227,7 @@ public class RSRpcServices implements 
HBaseRPCErrorHandler,
     if (region.getCoprocessorHost() != null) {
       region.getCoprocessorHost().postGet(get, results);
     }
-    region.metricsUpdateForGet(results);
+    region.metricsUpdateForGet(results, before);
     return Result.create(results, get.isCheckExistenceOnly() ? 
!results.isEmpty() : null, stale);
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/51259fe4/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
index 4754058..b9e54f0 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
@@ -188,6 +188,52 @@ public class TestRegionServerMetrics {
   }
 
   @Test
+  public void testGet() throws Exception {
+    String tableNameString = "testGet";
+    TableName tName = TableName.valueOf(tableNameString);
+    byte[] cfName = Bytes.toBytes("d");
+    byte[] row = Bytes.toBytes("rk");
+    byte[] qualifier = Bytes.toBytes("qual");
+    byte[] initValue = Bytes.toBytes("Value");
+
+    TEST_UTIL.createTable(tName, cfName);
+
+    Connection connection = TEST_UTIL.getConnection();
+    connection.getTable(tName).close(); //wait for the table to come up.
+
+    // Do a first put to be sure that the connection is established, meta is 
there and so on.
+    Table table = connection.getTable(tName);
+    Put p = new Put(row);
+    p.addColumn(cfName, qualifier, initValue);
+    table.put(p);
+
+    Get g = new Get(row);
+    for (int i=0; i< 10; i++) {
+      table.get(g);
+    }
+
+    metricsRegionServer.getRegionServerWrapper().forceRecompute();
+
+    try (RegionLocator locator = connection.getRegionLocator(tName)) {
+      for ( HRegionLocation location: locator.getAllRegionLocations()) {
+        HRegionInfo i = location.getRegionInfo();
+        MetricsRegionAggregateSource agg = rs.getRegion(i.getRegionName())
+          .getMetrics()
+          .getSource()
+          .getAggregateSource();
+        String prefix = 
"namespace_"+NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR+
+          "_table_"+tableNameString +
+          "_region_" + i.getEncodedName()+
+          "_metric";
+        metricsHelper.assertCounter(prefix + "_getSizeNumOps", 10, agg);
+        metricsHelper.assertCounter(prefix + "_getNumOps", 10, agg);
+      }
+      metricsHelper.assertCounterGt("Get_num_ops", 10, serverSource);
+    }
+    table.close();
+  }
+
+  @Test
   public void testMutationsWithoutWal() throws Exception {
     TableName tableName = TableName.valueOf("testMutationsWithoutWal");
     byte[] cf = Bytes.toBytes("d");

Reply via email to