From 9b4e8305f207a4eddec63fa7f94671f0603b1881 Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Tue, 25 Nov 2014 11:34:20 -0800 Subject: [PATCH] HBASE-12576 Add metrics for rolling the HLog if there are too few DN's in the write pipeline --- .../hbase/regionserver/wal/MetricsWALSource.java | 9 +++++++++ .../hbase/regionserver/wal/MetricsWALSourceImpl.java | 19 ++++++++++++++++++- .../apache/hadoop/hbase/regionserver/wal/FSHLog.java | 10 ++++++++-- .../hbase/regionserver/wal/WALActionsListener.java | 4 ++-- 4 files changed, 37 insertions(+), 5 deletions(-) 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 ba0df80..f8c746f 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 @@ -57,6 +57,11 @@ public interface MetricsWALSource extends BaseSource { String SLOW_APPEND_COUNT_DESC = "Number of appends that were slow."; String SYNC_TIME = "syncTime"; String SYNC_TIME_DESC = "The time it took to sync the WAL to HDFS."; + String ROLL_REQUESTED = "rollRequest"; + String ROLL_REQUESTED_DESC = "How many times a log roll has been requested total"; + String LOW_REPLICA_ROLL_REQUESTED = "lowReplicaRollRequest"; + String LOW_REPLICA_ROLL_REQUESTED_DESC = + "How many times a log roll was requested due to too few DN's in the write pipeline."; /** * Add the append size. @@ -83,4 +88,8 @@ public interface MetricsWALSource extends BaseSource { */ void incrementSyncTime(long time); + void incrementLogRollRequested(); + + void incrementLowReplicationLogRoll(); + } 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 d602d2f..36c3571 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 @@ -38,6 +38,8 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo private final MetricHistogram syncTimeHisto; private final MutableCounterLong appendCount; private final MutableCounterLong slowAppendCount; + private final MutableCounterLong logRollRequested; + private final MutableCounterLong lowReplicationLogRollRequested; public MetricsWALSourceImpl() { this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT); @@ -53,8 +55,13 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo appendTimeHisto = this.getMetricsRegistry().newHistogram(APPEND_TIME, APPEND_TIME_DESC); appendSizeHisto = this.getMetricsRegistry().newHistogram(APPEND_SIZE, APPEND_SIZE_DESC); appendCount = this.getMetricsRegistry().newCounter(APPEND_COUNT, APPEND_COUNT_DESC, 0l); - slowAppendCount = this.getMetricsRegistry().newCounter(SLOW_APPEND_COUNT, SLOW_APPEND_COUNT_DESC, 0l); + slowAppendCount = + this.getMetricsRegistry().newCounter(SLOW_APPEND_COUNT, SLOW_APPEND_COUNT_DESC, 0l); syncTimeHisto = this.getMetricsRegistry().newHistogram(SYNC_TIME, SYNC_TIME_DESC); + logRollRequested = + this.getMetricsRegistry().newCounter(ROLL_REQUESTED, ROLL_REQUESTED_DESC, 0L); + lowReplicationLogRollRequested = this.getMetricsRegistry() + .newCounter(LOW_REPLICA_ROLL_REQUESTED, LOW_REPLICA_ROLL_REQUESTED_DESC, 0L); } @Override @@ -81,4 +88,14 @@ public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSo public void incrementSyncTime(long time) { syncTimeHisto.add(time); } + + @Override + public void incrementLogRollRequested() { + logRollRequested.incr(); + } + + @Override + public void incrementLowReplicationLogRoll() { + lowReplicationLogRollRequested.incr(); + } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java index 02cf41e..5b62d02 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java @@ -1345,7 +1345,9 @@ public class FSHLog implements WAL { rollWriterLock.unlock(); } try { - if (lowReplication || writer != null && writer.getLength() > logrollsize) requestLogRoll(); + if (lowReplication || writer != null && writer.getLength() > logrollsize) { + requestLogRoll(lowReplication); + } } catch (IOException e) { LOG.warn("Writer.getLength() failed; continuing", e); } @@ -1561,9 +1563,13 @@ public class FSHLog implements WAL { // public only until class moves to o.a.h.h.wal public void requestLogRoll() { + requestLogRoll(false); + } + + private void requestLogRoll(boolean tooFewReplicas) { if (!this.listeners.isEmpty()) { for (WALActionsListener i: this.listeners) { - i.logRollRequested(); + i.logRollRequested(tooFewReplicas); } } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java index 2194ce9..457d859 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java @@ -67,7 +67,7 @@ public interface WALActionsListener { /** * A request was made that the WAL be rolled. */ - void logRollRequested(); + void logRollRequested(boolean tooFewReplicas); /** * The WAL is about to close. @@ -127,7 +127,7 @@ public interface WALActionsListener { public void postLogArchive(Path oldPath, Path newPath) throws IOException {} @Override - public void logRollRequested() {} + public void logRollRequested(boolean tooFewReplicas) {} @Override public void logCloseRequested() {} -- 2.1.1