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

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


The following commit(s) were added to refs/heads/branch-2.5 by this push:
     new 6913bf37803 HBASE-28985 Fix memStoreSize metric for a table and add 
heap and off-heap size metrics (#6486)
6913bf37803 is described below

commit 6913bf378038d045365b228cf7a67a618f392899
Author: Junegunn Choi <[email protected]>
AuthorDate: Tue Feb 24 01:51:33 2026 +0900

    HBASE-28985 Fix memStoreSize metric for a table and add heap and off-heap 
size metrics (#6486)
    
    Signed-off-by: Duo Zhang <[email protected]>
---
 .../hbase/regionserver/MetricsRegionWrapper.java   | 10 ++++++++
 .../regionserver/MetricsTableWrapperAggregate.java | 10 ++++++++
 .../regionserver/MetricsRegionSourceImpl.java      |  8 +++++++
 .../hbase/regionserver/MetricsTableSourceImpl.java |  8 +++++++
 .../regionserver/MetricsTableWrapperStub.java      | 10 ++++++++
 .../regionserver/TestMetricsRegionSourceImpl.java  | 10 ++++++++
 .../regionserver/MetricsRegionWrapperImpl.java     | 21 +++++++++++++++-
 .../MetricsTableWrapperAggregateImpl.java          | 28 ++++++++++++++++++++--
 .../regionserver/MetricsRegionWrapperStub.java     | 10 ++++++++
 .../hbase/regionserver/TestMetricsRegion.java      |  6 +++++
 .../regionserver/TestMetricsTableAggregate.java    |  2 ++
 11 files changed, 120 insertions(+), 3 deletions(-)

diff --git 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java
 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java
index 3115603aabf..1c4a3600459 100644
--- 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java
+++ 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java
@@ -60,6 +60,16 @@ public interface MetricsRegionWrapper {
    */
   long getMemStoreSize();
 
+  /**
+   * Get the size of the on heap memstore of this region
+   */
+  long getMemStoreHeapSize();
+
+  /**
+   * Get the size of the off heap memstore of this region
+   */
+  long getMemStoreOffHeapSize();
+
   /**
    * Get the total size of the store files this region server is serving from.
    */
diff --git 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
index b64c01aa799..287a980acc0 100644
--- 
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
+++ 
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregate.java
@@ -53,6 +53,16 @@ public interface MetricsTableWrapperAggregate {
    */
   long getMemStoreSize(String table);
 
+  /**
+   * Get the size of the on heap memstore of this table
+   */
+  long getMemStoreHeapSize(String table);
+
+  /**
+   * Get the size of the off heap memstore of this table
+   */
+  long getMemStoreOffHeapSize(String table);
+
   /**
    * Get the store file size against this table
    */
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 0c20456e8cb..9e7523b5bac 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
@@ -215,6 +215,14 @@ public class MetricsRegionSourceImpl implements 
MetricsRegionSource {
         this.regionWrapper.getMaxCompactedStoreFileRefCount());
       mrb.addGauge(Interns.info(regionNamePrefix + 
MetricsRegionServerSource.MEMSTORE_SIZE,
         MetricsRegionServerSource.MEMSTORE_SIZE_DESC), 
this.regionWrapper.getMemStoreSize());
+      mrb.addGauge(
+        Interns.info(regionNamePrefix + 
MetricsRegionServerSource.MEMSTORE_HEAP_SIZE,
+          MetricsRegionServerSource.MEMSTORE_HEAP_SIZE_DESC),
+        this.regionWrapper.getMemStoreHeapSize());
+      mrb.addGauge(
+        Interns.info(regionNamePrefix + 
MetricsRegionServerSource.MEMSTORE_OFFHEAP_SIZE,
+          MetricsRegionServerSource.MEMSTORE_OFFHEAP_SIZE_DESC),
+        this.regionWrapper.getMemStoreOffHeapSize());
       mrb.addGauge(
         Interns.info(regionNamePrefix + 
MetricsRegionServerSource.MAX_STORE_FILE_AGE,
           MetricsRegionServerSource.MAX_STORE_FILE_AGE_DESC),
diff --git 
a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
 
b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
index 83577228f6d..05e07e95ae6 100644
--- 
a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
+++ 
b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
@@ -294,6 +294,14 @@ public class MetricsTableSourceImpl implements 
MetricsTableSource {
           Interns.info(tableNamePrefix + 
MetricsRegionServerSource.MEMSTORE_SIZE,
             MetricsRegionServerSource.MEMSTORE_SIZE_DESC),
           tableWrapperAgg.getMemStoreSize(tableName.getNameAsString()));
+        mrb.addGauge(
+          Interns.info(tableNamePrefix + 
MetricsRegionServerSource.MEMSTORE_HEAP_SIZE,
+            MetricsRegionServerSource.MEMSTORE_HEAP_SIZE_DESC),
+          tableWrapperAgg.getMemStoreHeapSize(tableName.getNameAsString()));
+        mrb.addGauge(
+          Interns.info(tableNamePrefix + 
MetricsRegionServerSource.MEMSTORE_OFFHEAP_SIZE,
+            MetricsRegionServerSource.MEMSTORE_OFFHEAP_SIZE_DESC),
+          tableWrapperAgg.getMemStoreOffHeapSize(tableName.getNameAsString()));
         mrb.addGauge(
           Interns.info(tableNamePrefix + 
MetricsRegionServerSource.STOREFILE_COUNT,
             MetricsRegionServerSource.STOREFILE_COUNT_DESC),
diff --git 
a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
 
b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
index 591bc9e63b5..994fd92ede9 100644
--- 
a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
+++ 
b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
@@ -53,6 +53,16 @@ public class MetricsTableWrapperStub implements 
MetricsTableWrapperAggregate {
     return 1000;
   }
 
+  @Override
+  public long getMemStoreHeapSize(String table) {
+    return 1001;
+  }
+
+  @Override
+  public long getMemStoreOffHeapSize(String table) {
+    return 1002;
+  }
+
   @Override
   public long getStoreFileSize(String table) {
     return 2000;
diff --git 
a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
 
b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
index 3fe116a11a7..b6ffec7756a 100644
--- 
a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
+++ 
b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
@@ -111,6 +111,16 @@ public class TestMetricsRegionSourceImpl {
       return 0;
     }
 
+    @Override
+    public long getMemStoreHeapSize() {
+      return 0;
+    }
+
+    @Override
+    public long getMemStoreOffHeapSize() {
+      return 0;
+    }
+
     @Override
     public long getStoreFileSize() {
       return 0;
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java
index 1402512fdc3..a993bf90604 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java
@@ -50,6 +50,8 @@ public class MetricsRegionWrapperImpl implements 
MetricsRegionWrapper, Closeable
   private long storeRefCount;
   private long maxCompactedStoreFileRefCount;
   private long memstoreSize;
+  private long memstoreHeapSize;
+  private long memstoreOffHeapSize;
   private long storeFileSize;
   private long maxStoreFileAge;
   private long minStoreFileAge;
@@ -116,6 +118,16 @@ public class MetricsRegionWrapperImpl implements 
MetricsRegionWrapper, Closeable
     return memstoreSize;
   }
 
+  @Override
+  public long getMemStoreHeapSize() {
+    return memstoreHeapSize;
+  }
+
+  @Override
+  public long getMemStoreOffHeapSize() {
+    return memstoreOffHeapSize;
+  }
+
   @Override
   public long getStoreFileSize() {
     return storeFileSize;
@@ -246,6 +258,8 @@ public class MetricsRegionWrapperImpl implements 
MetricsRegionWrapper, Closeable
       int tempStoreRefCount = 0;
       int tempMaxCompactedStoreFileRefCount = 0;
       long tempMemstoreSize = 0;
+      long tempMemstoreHeapSize = 0;
+      long tempMemstoreOffHeapSize = 0;
       long tempStoreFileSize = 0;
       long tempMaxStoreFileAge = 0;
       long tempMinStoreFileAge = Long.MAX_VALUE;
@@ -262,7 +276,10 @@ public class MetricsRegionWrapperImpl implements 
MetricsRegionWrapper, Closeable
           int currentMaxCompactedStoreFileRefCount = 
store.getMaxCompactedStoreFileRefCount();
           tempMaxCompactedStoreFileRefCount =
             Math.max(tempMaxCompactedStoreFileRefCount, 
currentMaxCompactedStoreFileRefCount);
-          tempMemstoreSize += store.getMemStoreSize().getDataSize();
+          final MemStoreSize memStore = store.getMemStoreSize();
+          tempMemstoreSize += memStore.getDataSize();
+          tempMemstoreHeapSize += memStore.getHeapSize();
+          tempMemstoreOffHeapSize += memStore.getOffHeapSize();
           tempStoreFileSize += store.getStorefilesSize();
           OptionalLong storeMaxStoreFileAge = store.getMaxStoreFileAge();
           if (
@@ -315,6 +332,8 @@ public class MetricsRegionWrapperImpl implements 
MetricsRegionWrapper, Closeable
       storeRefCount = tempStoreRefCount;
       maxCompactedStoreFileRefCount = tempMaxCompactedStoreFileRefCount;
       memstoreSize = tempMemstoreSize;
+      memstoreHeapSize = tempMemstoreHeapSize;
+      memstoreOffHeapSize = tempMemstoreOffHeapSize;
       storeFileSize = tempStoreFileSize;
       maxStoreFileAge = tempMaxStoreFileAge;
       if (tempMinStoreFileAge != Long.MAX_VALUE) {
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
index b6ba1471f77..fab44f4fb94 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java
@@ -76,8 +76,10 @@ public class MetricsTableWrapperAggregateImpl implements 
MetricsTableWrapperAggr
 
             mt.storeFileCount += store.getStorefilesCount();
             mt.maxStoreFileCount = Math.max(mt.maxStoreFileCount, 
store.getStorefilesCount());
-            mt.memstoreSize += (store.getMemStoreSize().getDataSize()
-              + store.getMemStoreSize().getHeapSize() + 
store.getMemStoreSize().getOffHeapSize());
+            final MemStoreSize memstoreSize = store.getMemStoreSize();
+            mt.memstoreSize += memstoreSize.getDataSize();
+            mt.memstoreHeapSize += memstoreSize.getHeapSize();
+            mt.memstoreOffHeapSize += memstoreSize.getOffHeapSize();
             mt.storeFileSize += store.getStorefilesSize();
             mt.referenceFileCount += store.getNumReferenceFiles();
             if (store.getMaxStoreFileAge().isPresent()) {
@@ -225,6 +227,26 @@ public class MetricsTableWrapperAggregateImpl implements 
MetricsTableWrapperAggr
     }
   }
 
+  @Override
+  public long getMemStoreHeapSize(String table) {
+    MetricsTableValues metricsTable = 
metricsTableMap.get(TableName.valueOf(table));
+    if (metricsTable == null) {
+      return 0;
+    } else {
+      return metricsTable.memstoreHeapSize;
+    }
+  }
+
+  @Override
+  public long getMemStoreOffHeapSize(String table) {
+    MetricsTableValues metricsTable = 
metricsTableMap.get(TableName.valueOf(table));
+    if (metricsTable == null) {
+      return 0;
+    } else {
+      return metricsTable.memstoreOffHeapSize;
+    }
+  }
+
   @Override
   public long getStoreFileSize(String table) {
     MetricsTableValues metricsTable = 
metricsTableMap.get(TableName.valueOf(table));
@@ -398,6 +420,8 @@ public class MetricsTableWrapperAggregateImpl implements 
MetricsTableWrapperAggr
     long filteredReadRequestCount;
     long writeRequestCount;
     long memstoreSize;
+    long memstoreHeapSize;
+    long memstoreOffHeapSize;
     long regionCount;
     long storeCount;
     long storeFileCount;
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java
index a99212cb9de..b575f9659de 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java
@@ -77,6 +77,16 @@ public class MetricsRegionWrapperStub implements 
MetricsRegionWrapper {
     return 103;
   }
 
+  @Override
+  public long getMemStoreHeapSize() {
+    return 104;
+  }
+
+  @Override
+  public long getMemStoreOffHeapSize() {
+    return 105;
+  }
+
   @Override
   public long getStoreFileSize() {
     return 104;
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java
index d4b068bf662..cb0ae0d07ad 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java
@@ -62,6 +62,12 @@ public class TestMetricsRegion {
     HELPER.assertGauge(
       
"namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_memstoreSize",
 103,
       agg);
+    HELPER.assertGauge(
+      
"namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_memstoreHeapSize",
+      104, agg);
+    HELPER.assertGauge(
+      
"namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_memstoreOffHeapSize",
+      105, agg);
     HELPER
       
.assertCounter("namespace_TestNS_table_MetricsRegionWrapperStub_region_DEADBEEF001_metric_"
         + "filteredReadRequestCount", 107, agg);
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
index 4fc4e76d860..bd01808e6bb 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsTableAggregate.java
@@ -85,6 +85,8 @@ public class TestMetricsTableAggregate {
   @Test
   public void testRegionAndStoreMetrics() throws IOException {
     HELPER.assertGauge(pre + "memstoreSize", 1000, agg);
+    HELPER.assertGauge(pre + "memstoreHeapSize", 1001, agg);
+    HELPER.assertGauge(pre + "memstoreOffHeapSize", 1002, agg);
     HELPER.assertGauge(pre + "storeFileSize", 2000, agg);
     HELPER.assertGauge(pre + "tableSize", 3000, agg);
 

Reply via email to