[ 
https://issues.apache.org/jira/browse/HBASE-20679?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

stack updated HBASE-20679:
--------------------------
    Release Note: 
Adds the ability to dynamically compile jsp. Enable if you need to do some 'hot 
fix'. As with the example given in HBASE-20679, we can use a jsp to fix a RIT 
stuck situation. Set 'hbase.http.compile.jsp.dynamically.enabled' to true if 
you want to use this feature (default is false). After toggling on this flag, 
any jsp put in the ${HBASE_HOME}/hbase-webapps/master(or regionserver) can be 
dynamically compiled and executed via visiting the jsp from web browser or by 
loading the page via 'curl' command. For example, if you put a jsp named 
fix.jsp into ${HBASE_HOME}/hbase-webapps/master, you can execute this jsp by 
visiting this url: http://masterServerName:infoport/fix.jsp

For experts only. Loading and running arbitrary code can damage/destroy your 
deploy.

  was:
Adding the ability to dynamically compile jsp enable us to do some hot fix. As 
the example given in HBASE-20679, we can use a jsp to fix a RIT stuck 
situation. For experts only. Loading and running arbitrary code can 
damage/destroy your deploy.

The ability to dynamically load jsps is off by default. To enable set 
hbase.http.compile.jsp.dynamically.enable to true.


> 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.003.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