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);