2121 import =" static org.apache.commons.lang3.StringEscapeUtils.escapeXml"
2222 import =" java.util.Collections"
2323 import =" java.util.Comparator"
24- import =" java.util.ArrayList"
2524 import =" java.util.List"
26- import =" java.util.HashMap"
27- import =" java.util.Map"
2825 import =" java.util.stream.Collectors"
2926 import =" org.apache.hadoop.hbase.master.HMaster"
30- import =" org.apache.hadoop.hbase.master.RegionState"
3127 import =" org.apache.hadoop.hbase.master.assignment.RegionStateNode"
3228 import =" org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure"
33- import =" org.apache.hadoop.hbase.util.GsonUtil"
34- import =" org.apache.hbase.thirdparty.com.google.gson.Gson"
3529%>
3630<%
3731 HMaster master = (HMaster ) getServletContext(). getAttribute(HMaster . MASTER );
7569 <div class =" page-header" >
7670 <a href =" /rits.jsp?format=txt&filter=region&table=<%= table % > &state=<%= state % >" class =" btn btn-primary" >Regions in text format</a >
7771 <a href =" /rits.jsp?format=txt&filter=procedure&table=<%= table % > &state=<%= state % >" class =" btn btn-info" >Procedures in text format</a >
78- <a href =" /rits.jsp?format=json&table=<%= table % > &state=<%= state % >" class =" btn btn-info" >RIT info as JSON</a >
7972 <p >regions and procedures in text format can be copied and passed to command-line utils such as hbck2</p >
8073 </div >
8174 </div >
8679 <th >Region</th >
8780 <th >Table</th >
8881 <th >RegionState</th >
89- <th >Server</th >
9082 <th >Procedure</th >
9183 <th >ProcedureState</th >
92- <th >Start Time</th >
93- <th >Duration (ms)</th >
9484 </tr >
9585 <% for (RegionStateNode regionStateNode : rit) { % >
9686 <tr >
9787 <td ><%= regionStateNode. getRegionInfo(). getEncodedName() % > </td >
9888 <td ><%= regionStateNode. getRegionInfo(). getTable() % > </td >
9989 <td ><%= regionStateNode. getState() % > </td >
100- <td ><%= regionStateNode. getRegionLocation(). getServerName() % > </td >
10190 <%
10291 TransitRegionStateProcedure procedure = regionStateNode. getProcedure();
10392
10998 <td ><%= procedure. getProcId() % > </td >
11099 <td ><%= escapeXml(procedure. getState(). toString() + (procedure. isBypass() ? " (Bypassed)" : " " )) % > </td >
111100 <% } % >
112-
113- <% RegionState rs = regionStateNode. toRegionState(); % >
114- <td ><%= rs. getStamp() % > </td >
115- <td ><%= System . currentTimeMillis() - rs. getStamp() % > </td >
116101 </tr >
117102 <% } % >
118103 <p ><%= rit. size() % > region(s) in transition.</p >
122107 <% } % >
123108</div >
124109<jsp:include page =" footer.jsp" />
125- <% } else if (format. equals(" json" )) { % >
126- <%
127- Gson GSON = GsonUtil . createGson(). create();
128- Map<String , List<Map<String , Object > > > map = new HashMap<> ();
129- List<Map<String , Object > > rits = new ArrayList<> ();
130- map. put(" rits" , rits);
131- for (RegionStateNode regionStateNode : rit) {
132- Map<String , Object > r = new HashMap<> ();
133- r. put(" region" , regionStateNode. getRegionInfo(). getEncodedName());
134- r. put(" table" , regionStateNode. getRegionInfo(). getTable(). getNameAsString());
135- r. put(" state" , regionStateNode. getState());
136- r. put(" server" , regionStateNode. getRegionLocation(). getServerName());
137- TransitRegionStateProcedure procedure = regionStateNode. getProcedure();
138- if (procedure != null ) {
139- r. put(" procedureId" , procedure. getProcId());
140- r. put(" procedureState" , procedure. getState(). toString());
141- }
142- RegionState rs = regionStateNode. toRegionState();
143- r. put(" startTime" , rs. getStamp());
144- r. put(" duration" , System . currentTimeMillis() - rs. getStamp());
145- rits. add(r);
146- }
147- % >
148- <%= GSON . toJson(map) % >
110+
149111<% } else { % >
150112<div class =" container-fluid content" >
151113 <div class =" row" >
165127 </p >
166128 </div >
167129</div >
168- <% } % >
130+ <% } % >
0 commit comments