1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.master;
19
20 import java.io.IOException;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24 import org.apache.hadoop.conf.Configuration;
25 import org.apache.hadoop.hbase.CompatibilityFactory;
26 import org.apache.hadoop.hbase.HBaseTestingUtility;
27 import org.apache.hadoop.hbase.testclassification.MediumTests;
28 import org.apache.hadoop.hbase.MiniHBaseCluster;
29 import org.apache.hadoop.hbase.ServerName;
30 import org.apache.hadoop.hbase.MiniHBaseCluster.MiniHBaseClusterRegionServer;
31 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
32 import org.apache.hadoop.hbase.protobuf.generated.ClusterStatusProtos;
33 import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos;
34 import org.apache.hadoop.hbase.test.MetricsAssertHelper;
35 import org.junit.AfterClass;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.junit.experimental.categories.Category;
39
40 @Category(MediumTests.class)
41 public class TestMasterMetrics {
42
43 private static final Log LOG = LogFactory.getLog(TestMasterMetrics.class);
44 private static final MetricsAssertHelper metricsHelper = CompatibilityFactory
45 .getInstance(MetricsAssertHelper.class);
46
47 private static MiniHBaseCluster cluster;
48 private static HMaster master;
49 private static HBaseTestingUtility TEST_UTIL;
50
51 private static class MyRegionServer extends MiniHBaseClusterRegionServer {
52 public MyRegionServer(Configuration conf) throws IOException,
53 InterruptedException {
54 super(conf);
55 }
56
57 @Override
58 protected void tryRegionServerReport(
59 long reportStartTime, long reportEndTime) {
60
61 }
62 }
63
64 @BeforeClass
65 public static void startCluster() throws Exception {
66 LOG.info("Starting cluster");
67 TEST_UTIL = new HBaseTestingUtility();
68 TEST_UTIL.startMiniCluster(1, 1, 1, null, HMaster.class, MyRegionServer.class);
69 cluster = TEST_UTIL.getHBaseCluster();
70 LOG.info("Waiting for active/ready master");
71 cluster.waitForActiveAndReadyMaster();
72 master = cluster.getMaster();
73 }
74
75 @AfterClass
76 public static void after() throws Exception {
77 if (TEST_UTIL != null) {
78 TEST_UTIL.shutdownMiniCluster();
79 }
80 }
81
82 @Test(timeout = 300000)
83 public void testClusterRequests() throws Exception {
84
85
86 RegionServerStatusProtos.RegionServerReportRequest.Builder request =
87 RegionServerStatusProtos.RegionServerReportRequest.newBuilder();
88 ServerName serverName = cluster.getRegionServer(0).getServerName();
89 request.setServer(ProtobufUtil.toServerName(serverName));
90
91 MetricsMasterSource masterSource = master.getMetrics().getMetricsSource();
92 ClusterStatusProtos.ServerLoad sl = ClusterStatusProtos.ServerLoad.newBuilder()
93 .setTotalNumberOfRequests(10000)
94 .build();
95 masterSource.init();
96 request.setLoad(sl);
97 master.regionServerReport(null, request.build());
98
99 metricsHelper.assertCounter("cluster_requests", 10000, masterSource);
100
101 sl = ClusterStatusProtos.ServerLoad.newBuilder()
102 .setTotalNumberOfRequests(15000)
103 .build();
104 request.setLoad(sl);
105 master.regionServerReport(null, request.build());
106
107 metricsHelper.assertCounter("cluster_requests", 15000, masterSource);
108
109 master.regionServerReport(null, request.build());
110
111 metricsHelper.assertCounter("cluster_requests", 15000, masterSource);
112 master.stopMaster();
113 }
114
115 @Test
116 public void testDefaultMasterMetrics() throws Exception {
117 MetricsMasterSource masterSource = master.getMetrics().getMetricsSource();
118 metricsHelper.assertGauge( "numRegionServers", 1, masterSource);
119 metricsHelper.assertGauge( "averageLoad", 2, masterSource);
120 metricsHelper.assertGauge( "numDeadRegionServers", 0, masterSource);
121
122 metricsHelper.assertGauge("masterStartTime", master.getMasterStartTime(), masterSource);
123 metricsHelper.assertGauge("masterActiveTime", master.getMasterActiveTime(), masterSource);
124
125 metricsHelper.assertTag("isActiveMaster", "true", masterSource);
126 metricsHelper.assertTag("serverName", master.getServerName().toString(), masterSource);
127 metricsHelper.assertTag("clusterId", master.getClusterId(), masterSource);
128 metricsHelper.assertTag("zookeeperQuorum", master.getZooKeeper().getQuorum(), masterSource);
129 }
130 }