[ 
https://issues.apache.org/jira/browse/HBASE-20679?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16502047#comment-16502047
 ] 

Sean Busbey commented on HBASE-20679:
-------------------------------------

please add docs.

> Add the ability to compile JSP dynamically in Jetty
> ---------------------------------------------------
>
>                 Key: HBASE-20679
>                 URL: https://issues.apache.org/jira/browse/HBASE-20679
>             Project: HBase
>          Issue Type: New Feature
>    Affects Versions: 2.0.0
>            Reporter: Allan Yang
>            Assignee: Allan Yang
>            Priority: Major
>             Fix For: 3.0.0
>
>         Attachments: HBASE-20679.002.patch, HBASE-20679.patch
>
>
> As discussed in HBASE-20617, adding the ability to dynamically compile jsp 
> enable us to do some hot fix. 
>  For example, several days ago, in our testing HBase-2.0 cluster, 
> procedureWals were corrupted due to some unknown reasons. After restarting 
> the cluster, since some procedures(AssignProcedure for example) were 
> corrupted and couldn't be replayed. Some regions were stuck in RIT forever. 
> We couldn't use HBCK since it haven't support AssignmentV2 yet. As a matter 
> of fact, the namespace region was not online, so the master was not inited, 
> we even couldn't use shell command like assign/move. But, we wrote a jsp and 
> fix this issue easily. The jsp file is like this:
> {code:java}
> <%
>   String action = request.getParameter("action");
>   HMaster master = (HMaster)getServletContext().getAttribute(HMaster.MASTER);
>   List<RegionInfo> offlineRegionsToAssign = new ArrayList<>();
>   List<RegionStates.RegionStateNode> regionRITs = 
> master.getAssignmentManager()
>           .getRegionStates().getRegionsInTransition();
>   for (RegionStates.RegionStateNode regionStateNode :  regionRITs) {
>     // if regionStateNode don't have a procedure attached, but meta state 
> shows
>     // this region is in RIT, that means the previous procedure may be 
> corrupted
>     // we need to create a new assignProcedure to assign them
>     if (!regionStateNode.isInTransition()) {
>       offlineRegionsToAssign.add(regionStateNode.getRegionInfo());
>       out.println("RIT region:" + regionStateNode);
>     }
>   }
>   // Assign offline regions. Uses round-robin.
>   if ("fix".equals(action) && offlineRegionsToAssign.size() > 0) {
>     
> master.getMasterProcedureExecutor().submitProcedures(master.getAssignmentManager().
>             createRoundRobinAssignProcedures(offlineRegionsToAssign));
>   } else {
>     out.println("use ?action=fix to fix RIT regions");
>   }
> %>
> {code}
> Above it is only one example we can do if we have the ability to compile jsp 
> dynamically. We think it is very useful.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to