From 5ae308ec60db8b631dec4e725b1005f6314a3bbf Mon Sep 17 00:00:00 2001 From: Vrishal Kulkarni Date: Fri, 20 Nov 2015 06:57:18 -0800 Subject: [PATCH] HBASE-14719 Add metrics for master WAL count (numMasterWALs) and WAL size (masterWALSize). JMX output for master - Summary: { "name" : "Hadoop:service=HBase,name=Master,sub=Server", "modelerType" : "Master,sub=Server", "tag.liveRegionServers" : "192.168.0.105,62778,1448031609644;192.168.0.105,62780,1448031610088", "tag.deadRegionServers" : "", "tag.zookeeperQuorum" : "localhost:2181", "tag.serverName" : "192.168.0.105,62778,1448031609644", "tag.clusterId" : "f7a5e799-bfc4-41ad-9c99-224ae1c31508", "tag.isActiveMaster" : "true", "tag.Context" : "master", "tag.Hostname" : "vrishal-mbp", "masterActiveTime" : 1448031610075, "masterStartTime" : 1448031609644, "averageLoad" : 0.0, "numRegionServers" : 2, "numDeadRegionServers" : 0, "numMasterWALs" : 1, "masterWALSize" : 0, "clusterRequests" : 0 }, --- .../apache/hadoop/hbase/master/MetricsMasterSource.java | 5 ++++- .../apache/hadoop/hbase/master/MetricsMasterWrapper.java | 10 ++++++++++ .../hadoop/hbase/master/MetricsMasterSourceImpl.java | 6 +++++- .../hbase/procedure2/store/wal/ProcedureWALFile.java | 2 +- .../main/java/org/apache/hadoop/hbase/master/HMaster.java | 14 ++++++++++++++ .../hadoop/hbase/master/MetricsMasterWrapperImpl.java | 10 ++++++++++ .../org/apache/hadoop/hbase/master/TestMasterMetrics.java | 3 +++ .../hadoop/hbase/master/TestMasterMetricsWrapper.java | 4 +++- 8 files changed, 50 insertions(+), 4 deletions(-) diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java index 7dcb500..0792adc 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSource.java @@ -57,7 +57,8 @@ public interface MetricsMasterSource extends BaseSource { String SERVER_NAME_NAME = "serverName"; String CLUSTER_ID_NAME = "clusterId"; String IS_ACTIVE_MASTER_NAME = "isActiveMaster"; - + String NUM_MASTER_WALS_NAME = "numMasterWALs"; + String MASTER_WAL_SIZE_NAME = "masterWALSize"; String CLUSTER_REQUESTS_NAME = "clusterRequests"; String MASTER_ACTIVE_TIME_DESC = "Master Active Time"; @@ -71,6 +72,8 @@ public interface MetricsMasterSource extends BaseSource { String SERVER_NAME_DESC = "Server Name"; String CLUSTER_ID_DESC = "Cluster Id"; String IS_ACTIVE_MASTER_DESC = "Is Active Master"; + String NUM_MASTER_WALS_DESC = "Number of master WAL files"; + String MASTER_WAL_SIZE_DESC = "Size of all master WAL files"; diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapper.java index 644522a..c9bf657 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapper.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapper.java @@ -107,4 +107,14 @@ public interface MetricsMasterWrapper { */ int getNumDeadRegionServers(); + /** + * Get the number of master WAL files. + */ + long getNumWALFiles(); + + /** + * Get the size of all master WAL files. + */ + long getWALFileSize(); + } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java index c5ce5e4..f2f8365 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java @@ -95,7 +95,11 @@ public class MetricsMasterSourceImpl .tag(Interns.info(CLUSTER_ID_NAME, CLUSTER_ID_DESC), masterWrapper.getClusterId()) .tag(Interns.info(IS_ACTIVE_MASTER_NAME, IS_ACTIVE_MASTER_DESC), - String.valueOf(masterWrapper.getIsActiveMaster())); + String.valueOf(masterWrapper.getIsActiveMaster())) + .addGauge(Interns.info(NUM_MASTER_WALS_NAME, NUM_MASTER_WALS_DESC), + masterWrapper.getNumWALFiles()) + .addGauge(Interns.info(MASTER_WAL_SIZE_NAME, MASTER_WAL_SIZE_DESC), + masterWrapper.getWALFileSize()); } metricsRegistry.snapshot(metricsRecordBuilder, all); diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java index 4f8a493..6493526 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java @@ -121,7 +121,7 @@ public class ProcedureWALFile implements Comparable { } public long getSize() { - return logStatus.getLen(); + return logStatus != null ? logStatus.getLen() : 0; } public void removeFile() throws IOException { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java index afa6c7a..7713662 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java @@ -118,6 +118,7 @@ import org.apache.hadoop.hbase.monitoring.TaskMonitor; import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost; import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager; import org.apache.hadoop.hbase.procedure2.ProcedureExecutor; +import org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile; import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore; import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState; import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionServerInfo; @@ -2103,6 +2104,19 @@ public class HMaster extends HRegionServer implements MasterServices, Server { return masterActiveTime; } + public int getNumWALFiles() { + return procedureStore != null ? procedureStore.getActiveLogs().size() : 0; + } + + public long getWALFileSize() { + List logs = procedureStore != null ? + procedureStore.getActiveLogs() : Collections.EMPTY_LIST; + long size = 0; + for (ProcedureWALFile walFile : logs) + size += walFile.getSize(); + return size; + } + public int getRegionServerInfoPort(final ServerName sn) { RegionServerInfo info = this.regionServerTracker.getRegionServerInfo(sn); if (info == null || info.getInfoPort() == 0) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java index 727f9b2..a3277ab 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java @@ -118,4 +118,14 @@ public class MetricsMasterWrapperImpl implements MetricsMasterWrapper { public boolean getIsActiveMaster() { return master.isActiveMaster(); } + + @Override + public long getNumWALFiles() { + return master.getNumWALFiles(); + } + + @Override + public long getWALFileSize() { + return master.getWALFileSize(); + } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java index 8a55ce3..54e2715 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java @@ -128,5 +128,8 @@ public class TestMasterMetrics { metricsHelper.assertTag("serverName", master.getServerName().toString(), masterSource); metricsHelper.assertTag("clusterId", master.getClusterId(), masterSource); metricsHelper.assertTag("zookeeperQuorum", master.getZooKeeper().getQuorum(), masterSource); + + metricsHelper.assertGauge("numMasterWALs", master.getNumWALFiles(), masterSource); + metricsHelper.assertGauge("masterWALSize", master.getWALFileSize(), masterSource); } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java index efaa111..891c49c 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java @@ -73,5 +73,7 @@ public class TestMasterMetricsWrapper { } assertEquals(4, info.getNumRegionServers()); assertEquals(1, info.getNumDeadRegionServers()); + assertEquals(1, info.getNumWALFiles()); + assertEquals(0, info.getWALFileSize()); } -} \ No newline at end of file +} -- 1.9.5