From ae23c4bf1cf5f3c7d7e680dd7c186fc1172e25ad Mon Sep 17 00:00:00 2001 From: Vrishal Kulkarni Date: Mon, 30 Nov 2015 13:26:03 -0800 Subject: [PATCH] HBASE-13857 Slow WAL Append count in ServerMetricsTmpl.jamon is hardcoded to zero --- .../hbase/regionserver/MetricsRegionServerWrapper.java | 13 +++++++++---- .../hadoop/hbase/regionserver/wal/MetricsWALSource.java | 1 + .../hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java | 5 +++++ .../hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon | 2 +- .../hbase/regionserver/MetricsRegionServerWrapperImpl.java | 8 ++++++++ .../hbase/regionserver/MetricsRegionServerWrapperStub.java | 5 +++++ .../hadoop/hbase/regionserver/wal/TestMetricsWAL.java | 13 +++++++++++++ 7 files changed, 42 insertions(+), 5 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 6921222..02dec8d 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 @@ -70,16 +70,21 @@ public interface MetricsRegionServerWrapper { /** * Get the number of WAL files of this region server. */ - public long getNumWALFiles(); + long getNumWALFiles(); /** * Get the size of WAL files of this region server. */ - public long getWALFileSize(); - + long getWALFileSize(); + /** - * Get the number of store files hosted on this region server. + * Get the number of WAL files with slow appends for this region server. */ + long getNumWALSlowAppend(); + + /** + * Get the number of store files hosted on this region server. + */ long getNumStoreFiles(); /** diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java index f8c746f..c6dc731 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.java @@ -92,4 +92,5 @@ public interface MetricsWALSource extends BaseSource { void incrementLowReplicationLogRoll(); + long getSlowAppendCount(); } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java index 36c3571..7583780 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java @@ -98,4 +98,9 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo public void incrementLowReplicationLogRoll() { lowReplicationLogRollRequested.incr(); } + + @Override + public long getSlowAppendCount() { + return slowAppendCount.value(); + } } diff --git a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon index a86a4ea..113bee1 100644 --- a/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon +++ b/hbase-server/src/main/jamon/org/apache/hadoop/hbase/tmpl/regionserver/ServerMetricsTmpl.jamon @@ -84,7 +84,7 @@ java.lang.management.ManagementFactory; <% mWrap.getNumOnlineRegions() %> <% mWrap.getPercentFileLocal() %> <% mWrap.getPercentFileLocalSecondaryRegions() %> - <% 0 %> + <% mWrap.getNumWALSlowAppend() %> 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 e908be6..68d2309 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 @@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.io.hfile.CacheConfig; import org.apache.hadoop.hbase.io.hfile.CacheStats; import org.apache.hadoop.hbase.mob.MobCacheConfig; import org.apache.hadoop.hbase.mob.MobFileCache; +import org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.FSUtils; import org.apache.hadoop.hbase.wal.WALProvider; @@ -54,6 +55,7 @@ class MetricsRegionServerWrapperImpl private static final Log LOG = LogFactory.getLog(MetricsRegionServerWrapperImpl.class); private final HRegionServer regionServer; + private final MetricsWALSource metricsWALSource; private BlockCache blockCache; private MobFileCache mobFileCache; @@ -121,6 +123,7 @@ class MetricsRegionServerWrapperImpl this.runnable = new RegionServerMetricsWrapperRunnable(); this.executor.scheduleWithFixedDelay(this.runnable, this.period, this.period, TimeUnit.MILLISECONDS); + this.metricsWALSource = CompatibilitySingletonFactory.getInstance(MetricsWALSource.class); try { this.dfsHedgedReadMetrics = FSUtils.getDFSHedgedReadMetrics(regionServer.getConfiguration()); @@ -374,6 +377,11 @@ class MetricsRegionServerWrapperImpl public long getWALFileSize() { return walFileSize; } + + @Override + public long getNumWALSlowAppend() { + return metricsWALSource.getSlowAppendCount(); + } @Override public long getNumStoreFiles() { 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 f450f01..0d93284 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 @@ -236,6 +236,11 @@ public class MetricsRegionServerWrapperStub implements MetricsRegionServerWrappe } @Override + public long getNumWALSlowAppend() { + return 0; + } + + @Override public long getFlushedCellsCount() { return 100000000; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java index d9183d0..ba6915b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.java @@ -26,6 +26,7 @@ import org.junit.experimental.categories.Category; import java.util.concurrent.TimeUnit; +import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -53,4 +54,16 @@ public class TestMetricsWAL { metricsWAL.postSync(nanos, 1); verify(source, times(1)).incrementSyncTime(145); } + + @Test + public void testSlowAppend() throws Exception { + MetricsWALSource source = new MetricsWALSourceImpl(); + MetricsWAL metricsWAL = new MetricsWAL(source); + // One not so slow append (< 1000) + metricsWAL.postAppend(1, 900); + // Two slow appends (> 1000) + metricsWAL.postAppend(1, 1010); + metricsWAL.postAppend(1, 2000); + assertEquals(2, source.getSlowAppendCount()); + } } \ No newline at end of file -- 1.9.5