From 5da5ac0e7088d44d1b2b789ff353b0dffd2ed0db Mon Sep 17 00:00:00 2001 From: Yi Deng Date: Mon, 17 Nov 2014 13:14:27 -0800 Subject: [PATCH] [HBASE-12496] Add blockedRequestsCount metric Summary: `blockedRequestsCount` counts for requests blocked because mem size is greater than `blockingMemStoreSize`. Test Plan: `TestRegionServerMetrics` Differential Revision: https://reviews.facebook.net/D29055 --- .../hadoop/hbase/regionserver/MetricsRegionServerSource.java | 4 ++++ .../hadoop/hbase/regionserver/MetricsRegionServerWrapper.java | 5 +++++ .../hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java | 3 +++ .../main/java/org/apache/hadoop/hbase/regionserver/HRegion.java | 4 ++++ .../hbase/regionserver/MetricsRegionServerWrapperImpl.java | 9 +++++++++ .../hbase/regionserver/MetricsRegionServerWrapperStub.java | 5 +++++ 6 files changed, 30 insertions(+) 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 458ed01..1b637a0 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 @@ -252,6 +252,10 @@ public interface MetricsRegionServerSource extends BaseSource { String HEDGED_READ_WINS_DESC = "The number of times we started a hedged read and a hedged read won"; + String BLOCKED_REQUESTS_COUNT = "blockedRequestCount"; + String BLOCKED_REQUESTS_COUNT_DESC = "The number of blocked requests because of memstore size is " + + "larger than blockingMemStoreSize"; + String SPLIT_KEY = "splitTime"; String FLUSH_KEY = "flushTime"; } 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 513a0db..48de2ca 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 @@ -256,4 +256,9 @@ public interface MetricsRegionServerWrapper { * @return Count of times a hedged read beat out the primary read. */ public long getHedgedReadWins(); + + /** + * @return Count of requests blocked because the memstore size is larger than blockingMemStoreSize + */ + public long getBlockedRequestsCount(); } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java index bc1aa07..7083a1b 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java @@ -237,6 +237,9 @@ public class MetricsRegionServerSourceImpl .addCounter(Interns.info(HEDGED_READ_WINS, HEDGED_READ_WINS_DESC), rsWrap.getHedgedReadWins()) + .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC), + rsWrap.getBlockedRequestsCount()) + .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC), rsWrap.getZookeeperQuorum()) .tag(Interns.info(SERVER_NAME_NAME, SERVER_NAME_DESC), rsWrap.getServerName()) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index fbf151a..1ab1033 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -283,6 +283,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { // final Counter readRequestsCount = new Counter(); final Counter writeRequestsCount = new Counter(); + // Number of requests blocked by memstore size. + final Counter blockedRequestsCount = new Counter(); + // Compaction counters final AtomicLong compactionsFinished = new AtomicLong(0L); final AtomicLong compactionNumFilesCompacted = new AtomicLong(0L); @@ -3118,6 +3121,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { // if (this.getRegionInfo().isMetaRegion()) return; if (this.memstoreSize.get() > this.blockingMemStoreSize) { + blockedRequestsCount.increment(); requestFlush(); throw new RegionTooBusyException("Above memstore limit, " + "regionName=" + (this.getRegionInfo() == null ? "unknown" : 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 327f55c..47c596f 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 @@ -75,6 +75,7 @@ class MetricsRegionServerWrapperImpl private volatile long flushedCellsSize = 0; private volatile long compactedCellsSize = 0; private volatile long majorCompactedCellsSize = 0; + private volatile long blockedRequetsCount = 0L; private CacheStats cacheStats; private ScheduledExecutorService executor; @@ -440,6 +441,7 @@ class MetricsRegionServerWrapperImpl long tempFlushedCellsSize = 0; long tempCompactedCellsSize = 0; long tempMajorCompactedCellsSize = 0; + long tempBlockedRequestsCount = 0L; for (HRegion r : regionServer.getOnlineRegionsLocalContext()) { tempNumMutationsWithoutWAL += r.numMutationsWithoutWAL.get(); @@ -448,6 +450,7 @@ class MetricsRegionServerWrapperImpl tempWriteRequestsCount += r.writeRequestsCount.get(); tempCheckAndMutateChecksFailed += r.checkAndMutateChecksFailed.get(); tempCheckAndMutateChecksPassed += r.checkAndMutateChecksPassed.get(); + tempBlockedRequestsCount += r.blockedRequestsCount.get(); tempNumStores += r.stores.size(); for (Store store : r.stores.values()) { tempNumStoreFiles += store.getStorefilesCount(); @@ -524,6 +527,7 @@ class MetricsRegionServerWrapperImpl flushedCellsSize = tempFlushedCellsSize; compactedCellsSize = tempCompactedCellsSize; majorCompactedCellsSize = tempMajorCompactedCellsSize; + blockedRequetsCount = tempBlockedRequestsCount; } } @@ -536,4 +540,9 @@ class MetricsRegionServerWrapperImpl public long getHedgedReadWins() { return this.dfsHedgedReadMetrics == null? 0: this.dfsHedgedReadMetrics.getHedgedReadWins(); } + + @Override + public long getBlockedRequestsCount() { + return blockedRequetsCount; + } } 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 ca95c4a..b36dc10 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 @@ -250,4 +250,9 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe public long getHedgedReadWins() { return 10; } + + @Override + public long getBlockedRequestsCount() { + return 0; + } } \ No newline at end of file -- 1.9.3 (Apple Git-50)