1
2
3
4 package org.apache.hadoop.hbase.tmpl.master;
5
6
7 import org.apache.hadoop.hbase.HRegionInfo;
8
9 import org.apache.hadoop.hbase.master.AssignmentManager;
10
11 import org.apache.hadoop.hbase.master.RegionState;
12
13 import org.apache.hadoop.conf.Configuration;
14
15 import org.apache.hadoop.hbase.HBaseConfiguration;
16
17 import org.apache.hadoop.hbase.HConstants;
18
19 import java.util.Iterator;
20
21 import java.util.Map;
22
23 public class AssignmentManagerStatusTmplImpl
24 extends org.jamon.AbstractTemplateImpl
25 implements org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl.Intf
26
27 {
28 private final AssignmentManager assignmentManager;
29 private final int limit;
30 protected static org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl.ImplData p_implData)
31 {
32 if(! p_implData.getLimit__IsNotDefault())
33 {
34 p_implData.setLimit(100);
35 }
36 return p_implData;
37 }
38 public AssignmentManagerStatusTmplImpl(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl.ImplData p_implData)
39 {
40 super(p_templateManager, __jamon_setOptionalArguments(p_implData));
41 assignmentManager = p_implData.getAssignmentManager();
42 limit = p_implData.getLimit();
43 }
44
45 public void renderNoFlush(@SuppressWarnings({"unused","hiding"}) final java.io.Writer jamonWriter)
46 throws java.io.IOException
47 {
48
49
50 Map<String, RegionState> rit = assignmentManager
51 .getRegionStates().getRegionsInTransition();
52
53 Configuration conf = HBaseConfiguration.create();
54 int ritThreshold = conf.getInt(HConstants.METRICS_RIT_STUCK_WARNING_THRESHOLD, 60000);
55 int numOfRITOverThreshold = 0;
56 long maxRITTime = Long.MIN_VALUE;
57 long currentTime = System.currentTimeMillis();
58 String regionIDForOldestRIT = "";
59 for (Map.Entry<String, RegionState> e : rit.entrySet()) {
60 long ritTime = currentTime - e.getValue().getStamp();
61 if(ritTime > ritThreshold) {
62 numOfRITOverThreshold++;
63 }
64 if(maxRITTime < ritTime) {
65 maxRITTime = ritTime;
66 regionIDForOldestRIT = e.getKey();
67 }
68 }
69
70 int toRemove = rit.size() - limit;
71 int removed = 0;
72 if (toRemove > 0) {
73
74 for (Iterator<Map.Entry<String, RegionState>> it = rit.entrySet().iterator();
75 it.hasNext() && toRemove > 0;
76 ) {
77 Map.Entry<String, RegionState> e = it.next();
78 if (HRegionInfo.FIRST_META_REGIONINFO.getEncodedName().equals(
79 e.getKey()) ||
80 regionIDForOldestRIT.equals(e.getKey())) {
81
82 continue;
83 }
84 it.remove();
85 toRemove--;
86 removed++;
87 }
88 }
89
90
91
92 if (!rit.isEmpty() )
93 {
94
95 jamonWriter.write("\n <section>\n <h2>Regions in Transition</h2>\n <table class=\"table table-striped\">\n <tr><th>Region</th><th>State</th><th>RIT time (ms)</th></tr>\n ");
96
97 for (Map.Entry<String, RegionState> entry : rit.entrySet() )
98 {
99
100 jamonWriter.write("\n ");
101
102 if (regionIDForOldestRIT.equals(entry.getKey()) )
103 {
104
105 jamonWriter.write("\n <tr BGCOLOR=\"#FE2E2E\" >\n ");
106 }
107
108 else
109 {
110
111 jamonWriter.write("\n <tr>\n ");
112 }
113
114 jamonWriter.write("\n <td>");
115
116 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getKey()), jamonWriter);
117
118 jamonWriter.write("</td><td>");
119
120 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().toDescriptiveString()), jamonWriter);
121
122 jamonWriter.write("</td>\n <td>");
123
124 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf((currentTime - entry.getValue().getStamp())), jamonWriter);
125
126 jamonWriter.write(" </td></tr>\n ");
127 }
128
129 jamonWriter.write("\n <tr BGCOLOR=\"#D7DF01\"> <td>Total number of Regions in Transition for more than ");
130
131 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(ritThreshold), jamonWriter);
132
133 jamonWriter.write(" milliseconds</td><td> ");
134
135 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numOfRITOverThreshold), jamonWriter);
136
137 jamonWriter.write("</td><td></td>\n </tr>\n <tr> <td> Total number of Regions in Transition</td><td>");
138
139 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(rit.size()), jamonWriter);
140
141 jamonWriter.write(" </td><td></td>\n </table>\n ");
142
143 if (removed > 0 )
144 {
145
146 jamonWriter.write("\n (");
147
148 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(removed), jamonWriter);
149
150 jamonWriter.write(" more regions in transition not shown)\n ");
151 }
152
153 jamonWriter.write("\n </section>\n");
154 }
155
156 jamonWriter.write("\n\n");
157 }
158
159
160 }