HBASE-29731 Add L1 and L2 cache hit/miss caching metrics (#7482)

Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
Reviewed-by: Liu Xiao <liuxiao2103@qq.com>
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 c88a77b..f0b4a07 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
@@ -408,12 +408,22 @@
 
   String L1_CACHE_HIT_COUNT = "l1CacheHitCount";
   String L1_CACHE_HIT_COUNT_DESC = "L1 cache hit count.";
+  String L1_CACHE_HIT_CAGHING_COUNT = "l1CacheHitCachingCount";
+  String L1_CACHE_HIT_CAGHING_COUNT_DESC =
+    "Count of the hit on the L1 cache, for cacheable requests";
   String L1_CACHE_MISS_COUNT = "l1CacheMissCount";
   String L1_CACHE_MISS_COUNT_DESC = "L1 cache miss count.";
+  String L1_CACHE_MISS_CACHING_COUNT = "l1CacheMissCachingCount";
+  String L1_CACHE_MISS_CACHING_COUNT_DESC =
+    "Count of the misses on the L1 cache, for cacheable requests";
   String L1_CACHE_HIT_RATIO = "l1CacheHitRatio";
   String L1_CACHE_HIT_RATIO_DESC = "L1 cache hit ratio.";
+  String L1_CACHE_HIT_CACHING_RATIO = "l1CacheHitCachingRatio";
+  String L1_CACHE_HIT_CACHING_RATIO_DESC = "Hit Caching ratio of L1 cache";
   String L1_CACHE_MISS_RATIO = "l1CacheMissRatio";
   String L1_CACHE_MISS_RATIO_DESC = "L1 cache miss ratio.";
+  String L1_CACHE_MISS_CACHING_RATIO = "l1CacheMissCachingRatio";
+  String L1_CACHE_MISS_CACHING_RATIO_DESC = "Miss Caching ratio of L1 cache";
   String L2_CACHE_FREE_SIZE = "l2CacheFreeSize";
   String L2_CACHE_FREE_SIZE_DESC = "Amount of free bytes in the L2 cache";
   String L2_CACHE_SIZE = "l2CacheSize";
@@ -424,12 +434,22 @@
   String L2_CACHE_EVICTION_COUNT_DESC = "Count of blocks evicted from the L2 cache";
   String L2_CACHE_HIT_COUNT = "l2CacheHitCount";
   String L2_CACHE_HIT_COUNT_DESC = "L2 cache hit count.";
+  String L2_CACHE_HIT_CACHING_COUNT = "l2CacheHitCachingCount";
+  String L2_CACHE_HIT_CACHING_COUNT_DESC =
+    "Count of the hit on the L2 cache, for cacheable requests";
   String L2_CACHE_MISS_COUNT = "l2CacheMissCount";
   String L2_CACHE_MISS_COUNT_DESC = "L2 cache miss count.";
+  String L2_CACHE_MISS_CACHING_COUNT = "l2CacheMissCachingCount";
+  String L2_CACHE_MISS_CACHING_COUNT_DESC =
+    "Count of the misses on the L2 cache, for cacheable requests";
   String L2_CACHE_HIT_RATIO = "l2CacheHitRatio";
   String L2_CACHE_HIT_RATIO_DESC = "L2 cache hit ratio.";
+  String L2_CACHE_HIT_CACHING_RATIO = "l2CacheHitCachingRatio";
+  String L2_CACHE_HIT_CACHING_RATIO_DESC = "Hit Caching ratio of L2 cache";
   String L2_CACHE_MISS_RATIO = "l2CacheMissRatio";
   String L2_CACHE_MISS_RATIO_DESC = "L2 cache miss ratio.";
+  String L2_CACHE_MISS_CACHING_RATIO = "l2CacheMissCachingRatio";
+  String L2_CACHE_MISS_CACHING_RATIO_DESC = "Miss Caching ratio of L2 cache";
   String RS_START_TIME_NAME = "regionServerStartTime";
   String ZOOKEEPER_QUORUM_NAME = "zookeeperQuorum";
   String SERVER_NAME_NAME = "serverName";
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
index b214c8f..faeea3e 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java
@@ -597,12 +597,20 @@
         rsWrap.getL1CacheEvictedCount())
       .addGauge(Interns.info(L1_CACHE_HIT_COUNT, L1_CACHE_HIT_COUNT_DESC),
         rsWrap.getL1CacheHitCount())
+      .addGauge(Interns.info(L1_CACHE_HIT_CAGHING_COUNT, L1_CACHE_HIT_CAGHING_COUNT_DESC),
+        rsWrap.getL1CacheHitCachingCount())
       .addGauge(Interns.info(L1_CACHE_MISS_COUNT, L1_CACHE_MISS_COUNT_DESC),
         rsWrap.getL1CacheMissCount())
+      .addGauge(Interns.info(L1_CACHE_MISS_CACHING_COUNT, L1_CACHE_MISS_CACHING_COUNT_DESC),
+        rsWrap.getL1CacheMissCachingCount())
       .addGauge(Interns.info(L1_CACHE_HIT_RATIO, L1_CACHE_HIT_RATIO_DESC),
         rsWrap.getL1CacheHitRatio())
+      .addGauge(Interns.info(L1_CACHE_HIT_CACHING_RATIO, L1_CACHE_HIT_CACHING_RATIO_DESC),
+        rsWrap.getL1CacheHitCachingRatio())
       .addGauge(Interns.info(L1_CACHE_MISS_RATIO, L1_CACHE_MISS_RATIO_DESC),
         rsWrap.getL1CacheMissRatio())
+      .addGauge(Interns.info(L1_CACHE_MISS_CACHING_RATIO, L1_CACHE_MISS_CACHING_RATIO_DESC),
+        rsWrap.getL1CacheMissCachingRatio())
       .addGauge(Interns.info(L2_CACHE_SIZE, L2_CACHE_SIZE_DESC), rsWrap.getL2CacheSize())
       .addGauge(Interns.info(L2_CACHE_FREE_SIZE, L2_CACHE_FREE_SIZE_DESC),
         rsWrap.getL2CacheFreeSize())
@@ -611,12 +619,20 @@
         rsWrap.getL2CacheEvictedCount())
       .addGauge(Interns.info(L2_CACHE_HIT_COUNT, L2_CACHE_HIT_COUNT_DESC),
         rsWrap.getL2CacheHitCount())
+      .addGauge(Interns.info(L2_CACHE_HIT_CACHING_COUNT, L2_CACHE_HIT_CACHING_COUNT_DESC),
+        rsWrap.getL2CacheHitCachingCount())
       .addGauge(Interns.info(L2_CACHE_MISS_COUNT, L2_CACHE_MISS_COUNT_DESC),
         rsWrap.getL2CacheMissCount())
+      .addGauge(Interns.info(L2_CACHE_MISS_CACHING_COUNT, L2_CACHE_MISS_CACHING_COUNT_DESC),
+        rsWrap.getL2CacheMissCachingCount())
       .addGauge(Interns.info(L2_CACHE_HIT_RATIO, L2_CACHE_HIT_RATIO_DESC),
         rsWrap.getL2CacheHitRatio())
+      .addGauge(Interns.info(L2_CACHE_HIT_CACHING_RATIO, L2_CACHE_HIT_CACHING_RATIO_DESC),
+        rsWrap.getL2CacheHitCachingRatio())
       .addGauge(Interns.info(L2_CACHE_MISS_RATIO, L2_CACHE_MISS_RATIO_DESC),
         rsWrap.getL2CacheMissRatio())
+      .addGauge(Interns.info(L2_CACHE_MISS_CACHING_RATIO, L2_CACHE_MISS_CACHING_RATIO_DESC),
+        rsWrap.getL2CacheMissCachingRatio())
       .addGauge(Interns.info(MOB_FILE_CACHE_COUNT, MOB_FILE_CACHE_COUNT_DESC),
         rsWrap.getMobFileCacheCount())
       .addGauge(Interns.info(MOB_FILE_CACHE_HIT_PERCENT, MOB_FILE_CACHE_HIT_PERCENT_DESC),
diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java
index 5b957d9..240c084 100644
--- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java
+++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java
@@ -375,21 +375,41 @@
   long getL1CacheHitCount();
 
   /**
+   * Hit Caching count of L1 cache, for cacheable requests only.
+   */
+  long getL1CacheHitCachingCount();
+
+  /**
    * Miss count of L1 cache.
    */
   long getL1CacheMissCount();
 
   /**
+   * Miss Caching count of L1 cache, for cacheable requests only.
+   */
+  long getL1CacheMissCachingCount();
+
+  /**
    * Hit ratio of L1 cache.
    */
   double getL1CacheHitRatio();
 
   /**
+   * Hit Caching ratio of L1 cache.
+   */
+  double getL1CacheHitCachingRatio();
+
+  /**
    * Miss ratio of L1 cache.
    */
   double getL1CacheMissRatio();
 
   /**
+   * Miss Caching ratio of L1 cache.
+   */
+  double getL1CacheMissCachingRatio();
+
+  /**
    * Cache size (bytes) of L2 cache
    */
   long getL2CacheSize();
@@ -415,21 +435,41 @@
   long getL2CacheHitCount();
 
   /**
+   * Hit Caching count of L2 cache, for cacheable requests only.
+   */
+  long getL2CacheHitCachingCount();
+
+  /**
    * Miss count of L2 cache.
    */
   long getL2CacheMissCount();
 
   /**
+   * Miss Caching count of L2 cache, for cacheable requests only.
+   */
+  long getL2CacheMissCachingCount();
+
+  /**
    * Hit ratio of L2 cache.
    */
   double getL2CacheHitRatio();
 
   /**
+   * Hit Caching ratio of L2 cache.
+   */
+  double getL2CacheHitCachingRatio();
+
+  /**
    * Miss ratio of L2 cache.
    */
   double getL2CacheMissRatio();
 
   /**
+   * Miss Caching ratio of L2 cache.
+   */
+  double getL2CacheMissCachingRatio();
+
+  /**
    * Force a re-computation of the metrics.
    */
   void forceRecompute();
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java
index c8f7f96..40a6bdf 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java
@@ -374,41 +374,81 @@
   }
 
   @Override
+  public long getL1CacheHitCachingCount() {
+    return this.l1Stats != null ? this.l1Stats.getHitCachingCount() : 0L;
+  }
+
+  @Override
   public long getL1CacheMissCount() {
     return this.l1Stats != null ? this.l1Stats.getMissCount() : 0L;
   }
 
   @Override
+  public long getL1CacheMissCachingCount() {
+    return this.l1Stats != null ? this.l1Stats.getMissCachingCount() : 0L;
+  }
+
+  @Override
   public double getL1CacheHitRatio() {
     return this.l1Stats != null ? this.l1Stats.getHitRatio() : 0.0;
   }
 
   @Override
+  public double getL1CacheHitCachingRatio() {
+    return this.l1Stats != null ? this.l1Stats.getHitCachingRatio() : 0.0;
+  }
+
+  @Override
   public double getL1CacheMissRatio() {
     return this.l1Stats != null ? this.l1Stats.getMissRatio() : 0.0;
   }
 
   @Override
+  public double getL1CacheMissCachingRatio() {
+    return this.l1Stats != null ? this.l1Stats.getMissCachingRatio() : 0.0;
+  }
+
+  @Override
   public long getL2CacheHitCount() {
     return this.l2Stats != null ? this.l2Stats.getHitCount() : 0L;
   }
 
   @Override
+  public long getL2CacheHitCachingCount() {
+    return this.l2Stats != null ? this.l2Stats.getHitCachingCount() : 0L;
+  }
+
+  @Override
   public long getL2CacheMissCount() {
     return this.l2Stats != null ? this.l2Stats.getMissCount() : 0L;
   }
 
   @Override
+  public long getL2CacheMissCachingCount() {
+    return this.l2Stats != null ? this.l2Stats.getMissCachingCount() : 0L;
+  }
+
+  @Override
   public double getL2CacheHitRatio() {
     return this.l2Stats != null ? this.l2Stats.getHitRatio() : 0.0;
   }
 
   @Override
+  public double getL2CacheHitCachingRatio() {
+    return this.l2Stats != null ? this.l2Stats.getHitCachingRatio() : 0.0;
+  }
+
+  @Override
   public double getL2CacheMissRatio() {
     return this.l2Stats != null ? this.l2Stats.getMissRatio() : 0.0;
   }
 
   @Override
+  public double getL2CacheMissCachingRatio() {
+    return this.l2Stats != null ? this.l2Stats.getMissCachingRatio() : 0.0;
+  }
+
+  @Override
   public void forceRecompute() {
     this.runnable.run();
   }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java
index f1b6efe..093b0f0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java
@@ -408,21 +408,41 @@
   }
 
   @Override
+  public long getL1CacheHitCachingCount() {
+    return 200;
+  }
+
+  @Override
   public long getL1CacheMissCount() {
     return 100;
   }
 
   @Override
+  public long getL1CacheMissCachingCount() {
+    return 100;
+  }
+
+  @Override
   public double getL1CacheHitRatio() {
     return 80;
   }
 
   @Override
+  public double getL1CacheHitCachingRatio() {
+    return 80;
+  }
+
+  @Override
   public double getL1CacheMissRatio() {
     return 20;
   }
 
   @Override
+  public double getL1CacheMissCachingRatio() {
+    return 20;
+  }
+
+  @Override
   public long getL2CacheSize() {
     return 456;
   }
@@ -448,21 +468,41 @@
   }
 
   @Override
+  public long getL2CacheHitCachingCount() {
+    return 800;
+  }
+
+  @Override
   public long getL2CacheMissCount() {
     return 200;
   }
 
   @Override
+  public long getL2CacheMissCachingCount() {
+    return 200;
+  }
+
+  @Override
   public double getL2CacheHitRatio() {
     return 90;
   }
 
   @Override
+  public double getL2CacheHitCachingRatio() {
+    return 90;
+  }
+
+  @Override
   public double getL2CacheMissRatio() {
     return 10;
   }
 
   @Override
+  public double getL2CacheMissCachingRatio() {
+    return 10;
+  }
+
+  @Override
   public long getUpdatesBlockedTime() {
     return 419;
   }
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 aac2a59..8c6b3f0 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
@@ -136,17 +136,25 @@
     HELPER.assertGauge("l1CacheCount", 50, serverSource);
     HELPER.assertCounter("l1CacheEvictionCount", 1000, serverSource);
     HELPER.assertGauge("l1CacheHitCount", 200, serverSource);
+    HELPER.assertGauge("l1CacheHitCachingCount", 200, serverSource);
     HELPER.assertGauge("l1CacheMissCount", 100, serverSource);
+    HELPER.assertGauge("l1CacheMissCachingCount", 100, serverSource);
     HELPER.assertGauge("l1CacheHitRatio", 80, serverSource);
+    HELPER.assertGauge("l1CacheHitCachingRatio", 80, serverSource);
     HELPER.assertGauge("l1CacheMissRatio", 20, serverSource);
+    HELPER.assertGauge("l1CacheMissCachingRatio", 20, serverSource);
     HELPER.assertGauge("l2CacheFreeSize", 200, serverSource);
     HELPER.assertGauge("l2CacheSize", 456, serverSource);
     HELPER.assertGauge("l2CacheCount", 75, serverSource);
     HELPER.assertCounter("l2CacheEvictionCount", 2000, serverSource);
     HELPER.assertGauge("l2CacheHitCount", 800, serverSource);
+    HELPER.assertGauge("l2CacheHitCachingCount", 800, serverSource);
     HELPER.assertGauge("l2CacheMissCount", 200, serverSource);
+    HELPER.assertGauge("l2CacheMissCachingCount", 200, serverSource);
     HELPER.assertGauge("l2CacheHitRatio", 90, serverSource);
+    HELPER.assertGauge("l2CacheHitCachingRatio", 90, serverSource);
     HELPER.assertGauge("l2CacheMissRatio", 10, serverSource);
+    HELPER.assertGauge("l2CacheMissCachingRatio", 10, serverSource);
     HELPER.assertCounter("updatesBlockedTime", 419, serverSource);
   }