This is an automated email from the ASF dual-hosted git repository.
junegunn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new c4020c94f4d HBASE-28985 Fix memStoreSize metric for a table and add
heap and off-heap size metrics (#6486)
c4020c94f4d is described below
commit c4020c94f4d8a68ea7a8f06c47c6388bb726259a
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]>
---
.../regionserver/MetricsRegionSourceImpl.java | 8 +++++++
.../hbase/regionserver/MetricsRegionWrapper.java | 10 ++++++++
.../hbase/regionserver/MetricsTableSourceImpl.java | 8 +++++++
.../regionserver/MetricsTableWrapperAggregate.java | 10 ++++++++
.../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/MetricsRegionSourceImpl.java
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
index 391849cae66..f9cafa12494 100644
---
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java
+++
b/hbase-hadoop-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-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 8908d73d729..66cbd47a66a 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/MetricsTableSourceImpl.java
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
index b5f8db3738b..1565c8d639d 100644
---
a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
+++
b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java
@@ -298,6 +298,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-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 558049868ce..86d6e9454d0 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
@@ -58,6 +58,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-hadoop-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
b/hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
index 702096f852b..97ca56f6176 100644
---
a/hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java
+++
b/hbase-hadoop-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-hadoop-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
b/hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
index 38725c09c58..d586434888d 100644
---
a/hbase-hadoop-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java
+++
b/hbase-hadoop-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 c635f2950bc..81ed1849fca 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
@@ -51,6 +51,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;
@@ -121,6 +123,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;
@@ -260,6 +272,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;
@@ -276,7 +290,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 (
@@ -337,6 +354,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 fe085cbcbe5..e726437efaa 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()) {
@@ -226,6 +228,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));
@@ -399,6 +421,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 9db7777f981..9c9a5e9dc9c 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 d6be20bd38c..382aed2ea94 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_cpRequestCount",
108, 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);