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

rmattingly 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 e29fc04223c HBASE-29068 Report percentFilesLocalPrimaryRegions metric 
(#6596)
e29fc04223c is described below

commit e29fc04223c191cb6a63daeb5cd69732cab6b882
Author: Charles Connell <[email protected]>
AuthorDate: Thu Jan 16 08:45:11 2025 -0500

    HBASE-29068 Report percentFilesLocalPrimaryRegions metric (#6596)
    
    Signed-off-by: Ray Mattingly <[email protected]>
---
 .../hbase/regionserver/MetricsRegionServerSource.java     | 10 ++++++++--
 .../hbase/regionserver/MetricsRegionServerSourceImpl.java |  3 +++
 .../hbase/regionserver/MetricsRegionServerWrapper.java    |  5 +++++
 .../regionserver/MetricsRegionServerWrapperImpl.java      | 15 +++++++++++++++
 .../regionserver/MetricsRegionServerWrapperStub.java      |  5 +++++
 5 files changed, 36 insertions(+), 2 deletions(-)

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 8b64e793bed..c88a77b5140 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
@@ -314,10 +314,16 @@ public interface MetricsRegionServerSource extends 
BaseSource, JvmPauseMonitorSo
     "Size of data that has been sent by clients with the write ahead logging 
turned off.";
   String PERCENT_FILES_LOCAL = "percentFilesLocal";
   String PERCENT_FILES_LOCAL_DESC =
-    "The percent of HFiles that are stored on the local hdfs data node.";
+    "The percent of HFiles that are stored on the local hdfs data node. If not 
using "
+      + "region replicas, this should equal percentFilesLocalPrimaryRegions";
+  String PERCENT_FILES_LOCAL_PRIMARY_REGIONS = 
"percentFilesLocalPrimaryRegions";
+  String PERCENT_FILES_LOCAL_PRIMARY_REGIONS_DESC =
+    "The percent of HFiles used by primary regions that are stored on the 
local hdfs data node. "
+      + "This is the category of locality that you want to reach 100% when 
using region replicas";
   String PERCENT_FILES_LOCAL_SECONDARY_REGIONS = 
"percentFilesLocalSecondaryRegions";
   String PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC =
-    "The percent of HFiles used by secondary regions that are stored on the 
local hdfs data node.";
+    "The percent of HFiles used by secondary regions that are stored on the 
local hdfs data node. "
+      + "This is not likely to reach 100%";
   String SPLIT_QUEUE_LENGTH = "splitQueueLength";
   String SPLIT_QUEUE_LENGTH_DESC = "Length of the queue for splits.";
   String COMPACTION_QUEUE_LENGTH = "compactionQueueLength";
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 bfac0843e33..b214c8f8f4e 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
@@ -557,6 +557,9 @@ public class MetricsRegionServerSourceImpl extends 
BaseSourceImpl
         rsWrap.getDataInMemoryWithoutWAL())
       .addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC),
         rsWrap.getPercentFileLocal())
+      .addGauge(
+        Interns.info(PERCENT_FILES_LOCAL_PRIMARY_REGIONS, 
PERCENT_FILES_LOCAL_PRIMARY_REGIONS_DESC),
+        rsWrap.getPercentFileLocalPrimaryRegions())
       .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS,
         PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC), 
rsWrap.getPercentFileLocalSecondaryRegions())
       .addGauge(Interns.info(TOTAL_BYTES_READ, TOTAL_BYTES_READ_DESC), 
rsWrap.getTotalBytesRead())
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 26612e14825..5b957d9bf08 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
@@ -229,6 +229,11 @@ public interface MetricsRegionServerWrapper {
    */
   double getPercentFileLocal();
 
+  /**
+   * Get the percent of HFiles' that are local for primary region replicas.
+   */
+  double getPercentFileLocalPrimaryRegions();
+
   /**
    * Get the percent of HFiles' that are local for secondary region replicas.
    */
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 5d1e51c11ec..ef6bbd1f4b6 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
@@ -612,6 +612,11 @@ class MetricsRegionServerWrapperImpl implements 
MetricsRegionServerWrapper {
     return aggregate.percentFileLocal;
   }
 
+  @Override
+  public double getPercentFileLocalPrimaryRegions() {
+    return aggregate.percentFileLocalPrimaryRegions;
+  }
+
   @Override
   public double getPercentFileLocalSecondaryRegions() {
     return aggregate.percentFileLocalSecondaryRegions;
@@ -762,6 +767,7 @@ class MetricsRegionServerWrapperImpl implements 
MetricsRegionServerWrapper {
     private long numMutationsWithoutWAL = 0;
     private long dataInMemoryWithoutWAL = 0;
     private double percentFileLocal = 0;
+    private double percentFileLocalPrimaryRegions = 0;
     private double percentFileLocalSecondaryRegions = 0;
     private long flushedCellsCount = 0;
     private long compactedCellsCount = 0;
@@ -794,6 +800,7 @@ class MetricsRegionServerWrapperImpl implements 
MetricsRegionServerWrapper {
     private void aggregate(HRegionServer regionServer,
       Map<String, ArrayList<Long>> requestsCountCache) {
       HDFSBlocksDistribution hdfsBlocksDistribution = new 
HDFSBlocksDistribution();
+      HDFSBlocksDistribution hdfsBlocksDistributionPrimaryRegions = new 
HDFSBlocksDistribution();
       HDFSBlocksDistribution hdfsBlocksDistributionSecondaryRegions = new 
HDFSBlocksDistribution();
 
       long avgAgeNumerator = 0;
@@ -821,6 +828,9 @@ class MetricsRegionServerWrapperImpl implements 
MetricsRegionServerWrapper {
 
         HDFSBlocksDistribution distro = r.getHDFSBlocksDistribution();
         hdfsBlocksDistribution.add(distro);
+        if (r.getRegionInfo().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) 
{
+          hdfsBlocksDistributionPrimaryRegions.add(distro);
+        }
         if (r.getRegionInfo().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) 
{
           hdfsBlocksDistributionSecondaryRegions.add(distro);
         }
@@ -832,6 +842,11 @@ class MetricsRegionServerWrapperImpl implements 
MetricsRegionServerWrapper {
         
hdfsBlocksDistribution.getBlockLocalityIndex(regionServer.getServerName().getHostname());
       percentFileLocal = Double.isNaN(localityIndex) ? 0 : (localityIndex * 
100);
 
+      float localityIndexPrimaryRegions = hdfsBlocksDistributionPrimaryRegions
+        .getBlockLocalityIndex(regionServer.getServerName().getHostname());
+      percentFileLocalPrimaryRegions =
+        Double.isNaN(localityIndexPrimaryRegions) ? 0 : 
(localityIndexPrimaryRegions * 100);
+
       float localityIndexSecondaryRegions = 
hdfsBlocksDistributionSecondaryRegions
         .getBlockLocalityIndex(regionServer.getServerName().getHostname());
       percentFileLocalSecondaryRegions =
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 32c80e18004..f1b6efe50a9 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
@@ -262,6 +262,11 @@ public class MetricsRegionServerWrapperStub implements 
MetricsRegionServerWrappe
     return 99;
   }
 
+  @Override
+  public double getPercentFileLocalPrimaryRegions() {
+    return 99;
+  }
+
   @Override
   public double getPercentFileLocalSecondaryRegions() {
     return 99;

Reply via email to