From bd5508349e80cea1a00d28e9e3096b81558e80b4 Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Fri, 6 Nov 2015 10:21:36 -0800 Subject: [PATCH] HBASE-14778 Make block cache hit percentages not integer in the metrics system --- .../regionserver/MetricsRegionServerWrapper.java | 14 +++---- .../MetricsRegionServerWrapperImpl.java | 49 ++++++++++++++++------ .../MetricsRegionServerWrapperStub.java | 8 ++-- 3 files changed, 47 insertions(+), 24 deletions(-) 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 05800c2..7851770 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 @@ -151,12 +151,12 @@ public interface MetricsRegionServerWrapper { /** * Get the percent of HFiles' that are local. */ - int getPercentFileLocal(); + double getPercentFileLocal(); /** * Get the percent of HFiles' that are local for secondary region replicas. */ - int getPercentFileLocalSecondaryRegions(); + double getPercentFileLocalSecondaryRegions(); /** * Get the size of the split queue @@ -231,7 +231,7 @@ public interface MetricsRegionServerWrapper { /** * Get the percent of requests with the block cache turned on that hit the block cache. */ - int getBlockCacheHitCachingPercent(); + double getBlockCacheHitCachingPercent(); /** * Force a re-computation of the metrics. @@ -341,20 +341,20 @@ public interface MetricsRegionServerWrapper { /** * Gets the hit percent to the mob file cache. */ - int getMobFileCacheHitPercent(); + double getMobFileCacheHitPercent(); /** * @return Count of hedged read operations */ - public long getHedgedReadOps(); + long getHedgedReadOps(); /** * @return Count of times a hedged read beat out the primary read. */ - public long getHedgedReadWins(); + long getHedgedReadWins(); /** * @return Count of requests blocked because the memstore size is larger than blockingMemStoreSize */ - public long getBlockedRequestsCount(); + long getBlockedRequestsCount(); } 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 8ad1f33..9321691 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 @@ -74,8 +74,8 @@ class MetricsRegionServerWrapperImpl private volatile long totalStaticBloomSize = 0; private volatile long numMutationsWithoutWAL = 0; private volatile long dataInMemoryWithoutWAL = 0; - private volatile int percentFileLocal = 0; - private volatile int percentFileLocalSecondaryRegions = 0; + private volatile double percentFileLocal = 0; + private volatile double percentFileLocalSecondaryRegions = 0; private volatile long flushedCellsCount = 0; private volatile long compactedCellsCount = 0; private volatile long majorCompactedCellsCount = 0; @@ -330,15 +330,25 @@ class MetricsRegionServerWrapperImpl if (this.cacheStats == null) { return 0; } - return (int) (this.cacheStats.getHitRatio() * 100); + double ratio = this.cacheStats.getHitRatio(); + if (Double.isNaN(ratio)) { + ratio = 0; + } + return (ratio * 100); } @Override - public int getBlockCacheHitCachingPercent() { + public double getBlockCacheHitCachingPercent() { if (this.cacheStats == null) { return 0; } - return (int) (this.cacheStats.getHitCachingRatio() * 100); + + double ratio = this.cacheStats.getHitCachingRatio(); + + if (Double.isNaN(ratio)) { + ratio = 0; + } + return (ratio * 100); } @Override public void forceRecompute() { @@ -425,12 +435,12 @@ class MetricsRegionServerWrapperImpl } @Override - public int getPercentFileLocal() { + public double getPercentFileLocal() { return percentFileLocal; } @Override - public int getPercentFileLocalSecondaryRegions() { + public double getPercentFileLocalSecondaryRegions() { return percentFileLocalSecondaryRegions; } @@ -538,8 +548,8 @@ class MetricsRegionServerWrapperImpl } @Override - public int getMobFileCacheHitPercent() { - return (int) (mobFileCacheHitRatio * 100); + public double getMobFileCacheHitPercent() { + return (mobFileCacheHitRatio * 100); } /** @@ -572,8 +582,8 @@ class MetricsRegionServerWrapperImpl long tempTotalStaticBloomSize = 0; long tempNumMutationsWithoutWAL = 0; long tempDataInMemoryWithoutWAL = 0; - int tempPercentFileLocal = 0; - int tempPercentFileLocalSecondaryRegions = 0; + double tempPercentFileLocal = 0; + double tempPercentFileLocalSecondaryRegions = 0; long tempFlushedCellsCount = 0; long tempCompactedCellsCount = 0; long tempMajorCompactedCellsCount = 0; @@ -636,11 +646,19 @@ class MetricsRegionServerWrapperImpl } float localityIndex = hdfsBlocksDistribution.getBlockLocalityIndex( regionServer.getServerName().getHostname()); - tempPercentFileLocal = (int) (localityIndex * 100); + tempPercentFileLocal = (localityIndex * 100); + + if (Double.isNaN(tempPercentFileLocal)) { + tempPercentFileLocal = 0; + } float localityIndexSecondaryRegions = hdfsBlocksDistributionSecondaryRegions .getBlockLocalityIndex(regionServer.getServerName().getHostname()); - tempPercentFileLocalSecondaryRegions = (int) (localityIndexSecondaryRegions * 100); + tempPercentFileLocalSecondaryRegions = (localityIndexSecondaryRegions * 100); + + if (Double.isNaN(tempPercentFileLocalSecondaryRegions)) { + tempPercentFileLocalSecondaryRegions = 0; + } //Compute the number of requests per second long currentTime = EnvironmentEdgeManager.currentTime(); @@ -699,6 +717,11 @@ class MetricsRegionServerWrapperImpl mobFileCacheAccessCount = mobFileCache.getAccessCount(); mobFileCacheMissCount = mobFileCache.getMissCount(); mobFileCacheHitRatio = mobFileCache.getHitRatio(); + + if (Double.isNaN(mobFileCacheHitRatio)) { + mobFileCacheHitRatio = 0; + } + mobFileCacheEvictedCount = mobFileCache.getEvictedFileCount(); mobFileCacheCount = mobFileCache.getCacheSize(); blockedRequestsCount = tempBlockedRequestsCount; 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 a74461f..1c3e8bf 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 @@ -126,12 +126,12 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe } @Override - public int getPercentFileLocal() { + public double getPercentFileLocal() { return 99; } @Override - public int getPercentFileLocalSecondaryRegions() { + public double getPercentFileLocalSecondaryRegions() { return 99; } @@ -206,7 +206,7 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe } @Override - public int getBlockCacheHitCachingPercent() { + public double getBlockCacheHitCachingPercent() { return 97; } @@ -347,7 +347,7 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe } @Override - public int getMobFileCacheHitPercent() { + public double getMobFileCacheHitPercent() { return 50; } } -- 2.6.1