From 5e24ad70781d52d7c98b59f2f47df2d6ba26eb33 Mon Sep 17 00:00:00 2001 From: Amitanand Aiyer Date: Mon, 1 Dec 2014 12:07:07 -0800 Subject: [PATCH] Keep track of delayed flushes --- .../apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java | 3 +++ .../apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.java | 5 +++++ .../hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java | 4 +++- .../java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java | 5 +++++ .../hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java | 5 +++++ .../hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java | 5 +++++ 6 files changed, 26 insertions(+), 1 deletion(-) 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 2facb3b..d8d508b 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 @@ -249,6 +249,9 @@ public interface MetricsRegionServerSource extends BaseSource { String BLOCKED_REQUESTS_COUNT = "blockedRequestCount"; String BLOCKED_REQUESTS_COUNT_DESC = "The number of blocked requests because of memstore size is " + "larger than blockingMemStoreSize"; + String DELAYED_FLUSHES_COUNT = "delayedFlushesCount"; + String DELAYED_FLUSHES_COUNT_DESC = "The number of memstore flush requests that were delayed " + + " because there were too many store files."; 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 6ac3e2d..1da828c 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 @@ -251,4 +251,9 @@ public interface MetricsRegionServerWrapper { * @return Count of requests blocked because the memstore size is larger than blockingMemStoreSize */ public long getBlockedRequestsCount(); + + /** + * @return Count of memstore flush operations that were delayed because a store had too many files. + */ + public long getDelayedFlushCount(); } 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 c7b26b6..18bbd69 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 @@ -234,7 +234,9 @@ public class MetricsRegionServerSourceImpl rsWrap.getMajorCompactedCellsSize()) .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC), - rsWrap.getBlockedRequestsCount()) + rsWrap.getBlockedRequestsCount()) + .addCounter(Interns.info(DELAYED_FLUSHES_COUNT, DELAYED_FLUSHES_COUNT_DESC), + rsWrap.getDelayedFlushCount()) .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC), rsWrap.getZookeeperQuorum()) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java index f839e05..a1f7442 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java @@ -89,6 +89,7 @@ class MemStoreFlusher implements FlushRequester { "hbase.regionserver.global.memstore.lowerLimit"; private long blockingWaitTime; private final Counter updatesBlockedMsHighWater = new Counter(); + private final Counter delayedFlushes = new Counter(); private final FlushHandler[] flushHandlers; @@ -153,6 +154,9 @@ class MemStoreFlusher implements FlushRequester { return this.updatesBlockedMsHighWater; } + public Counter getDelayedFlushCount() { + return this.delayedFlushes; + } /** * The memstore across all regions has exceeded the low water mark. Pick * one region to flush and flush it synchronously (this is called from the @@ -413,6 +417,7 @@ class MemStoreFlusher implements FlushRequester { // Note: We don't impose blockingStoreFiles constraint on meta regions LOG.warn("Region " + region.getRegionNameAsString() + " has too many " + "store files; delaying flush up to " + this.blockingWaitTime + "ms"); + delayedFlushes.increment(); if (!this.server.compactSplitThread.requestSplit(region)) { try { this.server.compactSplitThread.requestSystemCompaction( 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 af51332..d5f56e2 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 @@ -522,4 +522,9 @@ class MetricsRegionServerWrapperImpl public long getBlockedRequestsCount() { return blockedRequestsCount; } + + @Override + public long getDelayedFlushCount() { + return this.regionServer.cacheFlusher.getDelayedFlushCount().get(); + } } 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 6502be1..5d9feb8 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 @@ -245,4 +245,9 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe public long getBlockedRequestsCount() { return 0; } + + @Override + public long getDelayedFlushCount() { + return 0; + } } -- 2.0.0