You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by re...@apache.org on 2020/10/26 02:53:27 UTC

[hbase] branch branch-2.2 updated: HBASE-25189 [Metrics] Add checkAndPut and checkAndDelete latency metrics at table level (#2548)

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

reidchan pushed a commit to branch branch-2.2
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.2 by this push:
     new 110b71a  HBASE-25189 [Metrics] Add checkAndPut and checkAndDelete latency metrics at table level (#2548)
110b71a is described below

commit 110b71a62bc5cc8b9692cc796874a8f679eb2704
Author: Reid Chan <re...@apache.org>
AuthorDate: Mon Oct 26 10:46:06 2020 +0800

    HBASE-25189 [Metrics] Add checkAndPut and checkAndDelete latency metrics at table level (#2548)
    
    Signed-off-by: Viraj Jasani <vj...@apache.org>
---
 .../hbase/regionserver/MetricsTableLatencies.java  | 17 +++++++++++++++
 .../regionserver/MetricsTableLatenciesImpl.java    | 25 ++++++++++++++++++++++
 .../hbase/regionserver/MetricsRegionServer.java    | 10 +++++++--
 .../hadoop/hbase/regionserver/RSRpcServices.java   |  9 ++++----
 .../regionserver/RegionServerTableMetrics.java     |  8 +++++++
 .../regionserver/TestMetricsRegionServer.java      | 15 ++-----------
 6 files changed, 65 insertions(+), 19 deletions(-)

diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatencies.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatencies.java
index 231bad1..a4181e9 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatencies.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatencies.java
@@ -53,6 +53,8 @@ public interface MetricsTableLatencies {
   String DELETE_BATCH_TIME = "deleteBatchTime";
   String INCREMENT_TIME = "incrementTime";
   String APPEND_TIME = "appendTime";
+  String CHECK_AND_DELETE_TIME = "checkAndDeleteTime";
+  String CHECK_AND_PUT_TIME = "checkAndPutTime";
 
   /**
    * Update the Put time histogram
@@ -125,4 +127,19 @@ public interface MetricsTableLatencies {
    * @param t time it took
    */
   void updateScanTime(String tableName, long t);
+
+  /**
+   * Update the CheckAndDelete time histogram.
+   * @param nameAsString The table the metric is for
+   * @param time time it took
+   */
+  void updateCheckAndDelete(String nameAsString, long time);
+
+  /**
+   * Update the CheckAndPut time histogram.
+   * @param nameAsString The table the metric is for
+   * @param time time it took
+   */
+  void updateCheckAndPut(String nameAsString, long time);
+
 }
diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatenciesImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatenciesImpl.java
index 5a3f3b9..4d0c74c 100644
--- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatenciesImpl.java
+++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableLatenciesImpl.java
@@ -47,6 +47,8 @@ public class MetricsTableLatenciesImpl extends BaseSourceImpl implements Metrics
     final MetricHistogram deleteBatchTimeHisto;
     final MetricHistogram scanTimeHisto;
     final MetricHistogram scanSizeHisto;
+    final MetricHistogram checkAndDeleteTimeHisto;
+    final MetricHistogram checkAndPutTimeHisto;
 
     TableHistograms(DynamicMetricsRegistry registry, TableName tn) {
       getTimeHisto = registry.newTimeHistogram(qualifyMetricsName(tn, GET_TIME));
@@ -60,6 +62,10 @@ public class MetricsTableLatenciesImpl extends BaseSourceImpl implements Metrics
           qualifyMetricsName(tn, DELETE_BATCH_TIME));
       scanTimeHisto = registry.newTimeHistogram(qualifyMetricsName(tn, SCAN_TIME));
       scanSizeHisto = registry.newSizeHistogram(qualifyMetricsName(tn, SCAN_SIZE));
+      checkAndDeleteTimeHisto =
+          registry.newTimeHistogram(qualifyMetricsName(tn, CHECK_AND_DELETE_TIME));
+      checkAndPutTimeHisto =
+          registry.newTimeHistogram(qualifyMetricsName(tn, CHECK_AND_PUT_TIME));
     }
 
     public void updatePut(long time) {
@@ -97,6 +103,15 @@ public class MetricsTableLatenciesImpl extends BaseSourceImpl implements Metrics
     public void updateScanTime(long t) {
       scanTimeHisto.add(t);
     }
+
+    public void updateCheckAndDeleteTime(long t) {
+      checkAndDeleteTimeHisto.add(t);
+    }
+
+    public void updateCheckAndPutTime(long t) {
+      checkAndPutTimeHisto.add(t);
+    }
+
   }
 
   @VisibleForTesting
@@ -175,6 +190,16 @@ public class MetricsTableLatenciesImpl extends BaseSourceImpl implements Metrics
   }
 
   @Override
+  public void updateCheckAndDelete(String tableName, long time) {
+    getOrCreateTableHistogram(tableName).updateCheckAndDeleteTime(time);
+  }
+
+  @Override
+  public void updateCheckAndPut(String tableName, long time) {
+    getOrCreateTableHistogram(tableName).updateCheckAndPutTime(time);
+  }
+
+  @Override
   public void getMetrics(MetricsCollector metricsCollector, boolean all) {
     MetricsRecordBuilder mrb = metricsCollector.addRecord(metricsName);
     // source is registered in supers constructor, sometimes called before the whole initialization.
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
index 68164b4..8552e0c 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java
@@ -138,11 +138,17 @@ public class MetricsRegionServer {
     serverSource.updateDeleteBatch(t);
   }
 
-  public void updateCheckAndDelete(long t) {
+  public void updateCheckAndDelete(TableName tn, long t) {
+    if (tableMetrics != null && tn != null) {
+      tableMetrics.updateCheckAndDelete(tn, t);
+    }
     serverSource.updateCheckAndDelete(t);
   }
 
-  public void updateCheckAndPut(long t) {
+  public void updateCheckAndPut(TableName tn, long t) {
+    if (tableMetrics != null && tn != null) {
+      tableMetrics.updateCheckAndPut(tn, t);
+    }
     serverSource.updateCheckAndPut(t);
   }
 
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 0819423..812c324 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
@@ -2982,7 +2982,8 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
         switch (type) {
         case DELETE:
           if (request.hasCondition()) {
-            regionServer.metricsRegionServer.updateCheckAndDelete(after - before);
+            regionServer.metricsRegionServer.updateCheckAndDelete(
+                region == null ? null : region.getRegionInfo().getTable(), after - before);
           } else {
             regionServer.metricsRegionServer.updateDelete(
                 region == null ? null : region.getRegionInfo().getTable(), after - before);
@@ -2990,15 +2991,15 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
           break;
         case PUT:
           if (request.hasCondition()) {
-            regionServer.metricsRegionServer.updateCheckAndPut(after - before);
+            regionServer.metricsRegionServer.updateCheckAndPut(
+                region == null ? null : region.getRegionInfo().getTable(), after - before);
           } else {
             regionServer.metricsRegionServer.updatePut(
-                region == null ? null : region.getRegionInfo().getTable(),after - before);
+                region == null ? null : region.getRegionInfo().getTable(), after - before);
           }
           break;
         default:
           break;
-
         }
       }
     }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerTableMetrics.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerTableMetrics.java
index ec6c049..0653066 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerTableMetrics.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerTableMetrics.java
@@ -65,6 +65,14 @@ public class RegionServerTableMetrics {
     latencies.updateDeleteBatch(table.getNameAsString(), time);
   }
 
+  public void updateCheckAndDelete(TableName table, long time) {
+    latencies.updateCheckAndDelete(table.getNameAsString(), time);
+  }
+
+  public void updateCheckAndPut(TableName table, long time) {
+    latencies.updateCheckAndPut(table.getNameAsString(), time);
+  }
+
   public void updateScanTime(TableName table, long time) {
     latencies.updateScanTime(table.getNameAsString(), time);
   }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
index 4bf71c8..ab22c8e 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java
@@ -149,8 +149,8 @@ public class TestMetricsRegionServer {
     for (int i=0; i < 17; i ++) {
       rsm.updatePut(null, 17);
       rsm.updateDelete(null, 17);
-      rsm.updateCheckAndDelete(17);
-      rsm.updateCheckAndPut(17);
+      rsm.updateCheckAndDelete(null, 17);
+      rsm.updateCheckAndPut(null, 17);
     }
 
     HELPER.assertCounter("appendNumOps", 24, serverSource);
@@ -171,17 +171,6 @@ public class TestMetricsRegionServer {
     HELPER.assertCounter("slowPutCount", 16, serverSource);
   }
 
-  String FLUSH_TIME = "flushTime";
-  String FLUSH_TIME_DESC = "Histogram for the time in millis for memstore flush";
-  String FLUSH_MEMSTORE_SIZE = "flushMemstoreSize";
-  String FLUSH_MEMSTORE_SIZE_DESC = "Histogram for number of bytes in the memstore for a flush";
-  String FLUSH_FILE_SIZE = "flushFileSize";
-  String FLUSH_FILE_SIZE_DESC = "Histogram for number of bytes in the resulting file for a flush";
-  String FLUSHED_OUTPUT_BYTES = "flushedOutputBytes";
-  String FLUSHED_OUTPUT_BYTES_DESC = "Total number of bytes written from flush";
-  String FLUSHED_MEMSTORE_BYTES = "flushedMemstoreBytes";
-  String FLUSHED_MEMSTORE_BYTES_DESC = "Total number of bytes of cells in memstore from flush";
-
   @Test
   public void testFlush() {
     rsm.updateFlush(null, 1, 2, 3);