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 @Override public void renderNoFlush(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 totalRITs = rit.size();
71 int toRemove = rit.size() - limit;
72 int removed = 0;
73 if (toRemove > 0) {
74
75 for (Iterator<Map.Entry<String, RegionState>> it = rit.entrySet().iterator();
76 it.hasNext() && toRemove > 0;
77 ) {
78 Map.Entry<String, RegionState> e = it.next();
79 if (HRegionInfo.FIRST_META_REGIONINFO.getEncodedName().equals(
80 e.getKey()) ||
81 regionIDForOldestRIT.equals(e.getKey())) {
82
83 continue;
84 }
85 it.remove();
86 toRemove--;
87 removed++;
88 }
89 }
90
91
92
93 if (!rit.isEmpty() )
94 {
95
96 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 ");
97
98 for (Map.Entry<String, RegionState> entry : rit.entrySet() )
99 {
100
101 jamonWriter.write("\n ");
102
103 if (regionIDForOldestRIT.equals(entry.getKey()) )
104 {
105
106 jamonWriter.write("\n <tr BGCOLOR=\"#FE2E2E\" >\n ");
107 }
108
109 else
110 {
111
112 jamonWriter.write("\n <tr>\n ");
113 }
114
115 jamonWriter.write("\n <td>");
116
117 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getKey()), jamonWriter);
118
119 jamonWriter.write("</td><td>");
120
121 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(entry.getValue().toDescriptiveString()), jamonWriter);
122
123 jamonWriter.write("</td>\n <td>");
124
125 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf((currentTime - entry.getValue().getStamp())), jamonWriter);
126
127 jamonWriter.write(" </td></tr>\n ");
128 }
129
130 jamonWriter.write("\n <tr BGCOLOR=\"#D7DF01\"> <td>Total number of Regions in Transition for more than ");
131
132 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(ritThreshold), jamonWriter);
133
134 jamonWriter.write(" milliseconds</td><td> ");
135
136 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(numOfRITOverThreshold), jamonWriter);
137
138 jamonWriter.write("</td><td></td>\n </tr>\n <tr> <td> Total number of Regions in Transition</td><td>");
139
140 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(totalRITs), jamonWriter);
141
142 jamonWriter.write(" </td><td></td>\n </table>\n ");
143
144 if (removed > 0 )
145 {
146
147 jamonWriter.write("\n (");
148
149 org.jamon.escaping.Escaping.HTML.write(org.jamon.emit.StandardEmitter.valueOf(removed), jamonWriter);
150
151 jamonWriter.write(" more regions in transition not shown)\n ");
152 }
153
154 jamonWriter.write("\n </section>\n");
155 }
156
157 jamonWriter.write("\n\n");
158 }
159
160
161 }