hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From git-site-r...@apache.org
Subject [06/51] [partial] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.
Date Fri, 11 Aug 2017 15:06:07 GMT
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
index 291256a..752a26f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html
@@ -30,151 +30,151 @@
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.InputStream;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.OutputStream;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.commons.logging.Log;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.commons.logging.LogFactory;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ServerName;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashException;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher.RegionCloseOperation;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.UnassignRegionStateData;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">025</span>import java.net.ConnectException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.commons.logging.Log;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.commons.logging.LogFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ServerName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashException;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher.RegionCloseOperation;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.UnassignRegionStateData;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * Procedure that describe the unassignment of a single region.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * There can only be one RegionTransitionProcedure per region running at the time,<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * since each procedure takes a lock on the region.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;p&gt;The Unassign starts by placing a "close region" request in the Remote Dispatcher<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * queue, and the procedure will then go into a "waiting state".<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * The Remote Dispatcher will batch the various requests for that server and<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * they will be sent to the RS for execution.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * The RS will complete the open operation by calling master.reportRegionStateTransition().<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * The AM will intercept the transition report, and notify the procedure.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * The procedure will finish the unassign by publishing its new state on meta<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * or it will retry the unassign.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> */<a name="line.64"></a>
-<span class="sourceLineNo">065</span>@InterfaceAudience.Private<a name="line.65"></a>
-<span class="sourceLineNo">066</span>public class UnassignProcedure extends RegionTransitionProcedure {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final Log LOG = LogFactory.getLog(UnassignProcedure.class);<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * Where to send the unassign RPC.<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  protected volatile ServerName hostingServer;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  /**<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * The Server we will subsequently assign the region too (can be null).<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  protected volatile ServerName destinationServer;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected final AtomicBoolean serverCrashed = new AtomicBoolean(false);<a name="line.78"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * Procedure that describes the unassignment of a single region.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * There can only be one RegionTransitionProcedure -- i.e. an assign or an unassign -- per region<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * running at a time, since each procedure takes a lock on the region.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> *<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;p&gt;The Unassign starts by placing a "close region" request in the Remote Dispatcher<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * queue, and the procedure will then go into a "waiting state" (suspend).<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * The Remote Dispatcher will batch the various requests for that server and<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * they will be sent to the RS for execution.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * The RS will complete the open operation by calling master.reportRegionStateTransition().<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * The AM will intercept the transition report, and notify this procedure.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * The procedure will wakeup and finish the unassign by publishing its new state on meta.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p&gt;If we are unable to contact the remote regionserver whether because of ConnectException<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * or socket timeout, we will call expire on the server we were trying to contact. We will remain<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * in suspended state waiting for a wake up from the ServerCrashProcedure that is processing the<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * failed server. The basic idea is that if we notice a crashed server, then we have a<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * responsibility; i.e. we should not let go of the region until we are sure the server that was<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * hosting has had its crash processed. If we let go of the region before then, an assign might<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * run before the logs have been split which would make for data loss.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * &lt;p&gt;TODO: Rather than this tricky coordination between SCP and this Procedure, instead, work on<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * returning a SCP as our subprocedure; probably needs work on the framework to do this,<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * especially if the SCP already created.<a name="line.74"></a>
+<span class="sourceLineNo">075</span> */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>@InterfaceAudience.Private<a name="line.76"></a>
+<span class="sourceLineNo">077</span>public class UnassignProcedure extends RegionTransitionProcedure {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private static final Log LOG = LogFactory.getLog(UnassignProcedure.class);<a name="line.78"></a>
 <span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  // TODO: should this be in a reassign procedure?<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  //       ...and keep unassign for 'disable' case?<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private boolean force;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public UnassignProcedure() {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    // Required by the Procedure framework to create the procedure on replay<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    super();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Where to send the unassign RPC.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected volatile ServerName hostingServer;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * The Server we will subsequently assign the region too (can be null).<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected volatile ServerName destinationServer;<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public UnassignProcedure(final HRegionInfo regionInfo,  final ServerName hostingServer,<a name="line.89"></a>
-<span class="sourceLineNo">090</span>                           final boolean force) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    this(regionInfo, hostingServer, null, force);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public UnassignProcedure(final HRegionInfo regionInfo,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      final ServerName hostingServer, final ServerName destinationServer, final boolean force) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    super(regionInfo);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.hostingServer = hostingServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.destinationServer = destinationServer;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    this.force = force;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>    // we don't need REGION_TRANSITION_QUEUE, we jump directly to sending the request<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    setTransitionState(RegionTransitionState.REGION_TRANSITION_DISPATCH);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public TableOperationType getTableOperationType() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return TableOperationType.REGION_UNASSIGN;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">089</span>  // TODO: should this be in a reassign procedure?<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  //       ...and keep unassign for 'disable' case?<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private boolean force;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public UnassignProcedure() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    // Required by the Procedure framework to create the procedure on replay<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    super();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public UnassignProcedure(final HRegionInfo regionInfo,  final ServerName hostingServer,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>                           final boolean force) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this(regionInfo, hostingServer, null, force);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public UnassignProcedure(final HRegionInfo regionInfo,<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      final ServerName hostingServer, final ServerName destinationServer, final boolean force) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    super(regionInfo);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.hostingServer = hostingServer;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.destinationServer = destinationServer;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.force = force;<a name="line.108"></a>
 <span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  @Override<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected boolean isRollbackSupported(final RegionTransitionState state) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    switch (state) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      case REGION_TRANSITION_QUEUE:<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      case REGION_TRANSITION_DISPATCH:<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      default:<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        return false;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public void serializeStateData(final OutputStream stream) throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    UnassignRegionStateData.Builder state = UnassignRegionStateData.newBuilder()<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        .setTransitionState(getTransitionState())<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        .setHostingServer(ProtobufUtil.toServerName(this.hostingServer))<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        .setRegionInfo(HRegionInfo.convert(getRegionInfo()));<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    if (this.destinationServer != null) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      state.setDestinationServer(ProtobufUtil.toServerName(destinationServer));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (force) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      state.setForce(true);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    state.build().writeDelimitedTo(stream);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public void deserializeStateData(final InputStream stream) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    final UnassignRegionStateData state = UnassignRegionStateData.parseDelimitedFrom(stream);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    setTransitionState(state.getTransitionState());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    setRegionInfo(HRegionInfo.convert(state.getRegionInfo()));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    this.hostingServer = ProtobufUtil.toServerName(state.getHostingServer());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    force = state.getForce();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (state.hasDestinationServer()) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.destinationServer = ProtobufUtil.toServerName(state.getDestinationServer());<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  protected boolean startTransition(final MasterProcedureEnv env, final RegionStateNode regionNode) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // nothing to do here. we skip the step in the constructor<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // by jumping to REGION_TRANSITION_DISPATCH<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    throw new UnsupportedOperationException();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  protected boolean updateTransition(final MasterProcedureEnv env, final RegionStateNode regionNode)<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        throws IOException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    // if the region is already closed or offline we can't do much...<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    if (regionNode.isInState(State.CLOSED, State.OFFLINE)) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      LOG.info("Not unassigned " + this + "; " + regionNode.toShortString());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      return false;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">110</span>    // we don't need REGION_TRANSITION_QUEUE, we jump directly to sending the request<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    setTransitionState(RegionTransitionState.REGION_TRANSITION_DISPATCH);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public TableOperationType getTableOperationType() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return TableOperationType.REGION_UNASSIGN;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  protected boolean isRollbackSupported(final RegionTransitionState state) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    switch (state) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      case REGION_TRANSITION_QUEUE:<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      case REGION_TRANSITION_DISPATCH:<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        return true;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      default:<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        return false;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void serializeStateData(final OutputStream stream) throws IOException {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    UnassignRegionStateData.Builder state = UnassignRegionStateData.newBuilder()<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        .setTransitionState(getTransitionState())<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        .setHostingServer(ProtobufUtil.toServerName(this.hostingServer))<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        .setRegionInfo(HRegionInfo.convert(getRegionInfo()));<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    if (this.destinationServer != null) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      state.setDestinationServer(ProtobufUtil.toServerName(destinationServer));<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    if (force) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      state.setForce(true);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    state.build().writeDelimitedTo(stream);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void deserializeStateData(final InputStream stream) throws IOException {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final UnassignRegionStateData state = UnassignRegionStateData.parseDelimitedFrom(stream);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    setTransitionState(state.getTransitionState());<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    setRegionInfo(HRegionInfo.convert(state.getRegionInfo()));<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    this.hostingServer = ProtobufUtil.toServerName(state.getHostingServer());<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    force = state.getForce();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    if (state.hasDestinationServer()) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.destinationServer = ProtobufUtil.toServerName(state.getDestinationServer());<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  protected boolean startTransition(final MasterProcedureEnv env, final RegionStateNode regionNode) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // nothing to do here. we skip the step in the constructor<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // by jumping to REGION_TRANSITION_DISPATCH<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    throw new UnsupportedOperationException();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
 <span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // if the server is down, mark the operation as failed. region cannot be unassigned<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // if server is down<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    if (serverCrashed.get() || !isServerOnline(env, regionNode)) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      LOG.warn("Server already down: " + this + "; " + regionNode.toShortString());<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      setFailure("source region server not online",<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          new ServerCrashException(getProcId(), regionNode.getRegionLocation()));<a name="line.169"></a>
+<span class="sourceLineNo">164</span>  @Override<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  protected boolean updateTransition(final MasterProcedureEnv env, final RegionStateNode regionNode)<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // if the region is already closed or offline we can't do much...<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    if (regionNode.isInState(State.CLOSED, State.OFFLINE)) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info("Not unassigned " + this + "; " + regionNode.toShortString());<a name="line.169"></a>
 <span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
 <span class="sourceLineNo">171</span>    }<a name="line.171"></a>
 <span class="sourceLineNo">172</span><a name="line.172"></a>
@@ -189,93 +189,95 @@
 <span class="sourceLineNo">181</span><a name="line.181"></a>
 <span class="sourceLineNo">182</span>    // Add the close region operation the the server dispatch queue.<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    if (!addToRemoteDispatcher(env, regionNode.getRegionLocation())) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      // If addToRemoteDispatcher fails, it calls #remoteCallFailed which<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      // does all cleanup.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    // We always return true, even if we fail dispatch because addToRemoteDispatcher<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    // failure processing sets state back to REGION_TRANSITION_QUEUE so we try again;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    // i.e. return true to keep the Procedure running; it has been reset to startover.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    return true;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  @Override<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  protected void finishTransition(final MasterProcedureEnv env, final RegionStateNode regionNode)<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      throws IOException {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    env.getAssignmentManager().markRegionAsClosed(regionNode);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  @Override<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  public RemoteOperation remoteCallBuild(final MasterProcedureEnv env, final ServerName serverName) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    assert serverName.equals(getRegionState(env).getRegionLocation());<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    return new RegionCloseOperation(this, getRegionInfo(), this.destinationServer);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  protected void reportTransition(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final TransitionCode code, final long seqId) throws UnexpectedStateException {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    switch (code) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      case CLOSED:<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        setTransitionState(RegionTransitionState.REGION_TRANSITION_FINISH);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        break;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      default:<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        throw new UnexpectedStateException(String.format(<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          "Received report unexpected transition state=%s for region=%s server=%s, expected CLOSED.",<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          code, regionNode.getRegionInfo(), regionNode.getRegionLocation()));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  @Override<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  protected void remoteCallFailed(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      final IOException exception) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    // TODO: Is there on-going rpc to cleanup?<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (exception instanceof ServerCrashException) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      // This exception comes from ServerCrashProcedure after log splitting.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // It is ok to let this procedure go on to complete close now.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // This will release lock on this region so the subsequent assign can succeed.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      try {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        reportTransition(env, regionNode, TransitionCode.CLOSED, HConstants.NO_SEQNUM);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      } catch (UnexpectedStateException e) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        // Should never happen.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        throw new RuntimeException(e);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    } else if (exception instanceof RegionServerAbortedException ||<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        exception instanceof RegionServerStoppedException ||<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        exception instanceof ServerNotRunningYetException) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // TODO<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // RS is aborting, we cannot offline the region since the region may need to do WAL<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      // recovery. Until we see the RS expiration, we should retry.<a name="line.239"></a>
+<span class="sourceLineNo">184</span>      // If addToRemoteDispatcher fails, it calls the callback #remoteCallFailed.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // Return true to keep the procedure running.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return true;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  protected void finishTransition(final MasterProcedureEnv env, final RegionStateNode regionNode)<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      throws IOException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    env.getAssignmentManager().markRegionAsClosed(regionNode);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public RemoteOperation remoteCallBuild(final MasterProcedureEnv env, final ServerName serverName) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    assert serverName.equals(getRegionState(env).getRegionLocation());<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    return new RegionCloseOperation(this, getRegionInfo(), this.destinationServer);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  @Override<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  protected void reportTransition(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      final TransitionCode code, final long seqId) throws UnexpectedStateException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    switch (code) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      case CLOSED:<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        setTransitionState(RegionTransitionState.REGION_TRANSITION_FINISH);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        break;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      default:<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        throw new UnexpectedStateException(String.format(<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          "Received report unexpected transition state=%s for region=%s server=%s, expected CLOSED.",<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          code, regionNode.getRegionInfo(), regionNode.getRegionLocation()));<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  @Override<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  protected boolean remoteCallFailed(final MasterProcedureEnv env, final RegionStateNode regionNode,<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      final IOException exception) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // TODO: Is there on-going rpc to cleanup?<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    if (exception instanceof ServerCrashException) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      // This exception comes from ServerCrashProcedure after log splitting.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // SCP found this region as a RIT. Its call into here says it is ok to let this procedure go<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      // on to a complete close now. This will release lock on this region so subsequent action on<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // region can succeed; e.g. the assign that follows this unassign when a move (w/o wait on SCP<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      // the assign could run w/o logs being split so data loss).<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      try {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        reportTransition(env, regionNode, TransitionCode.CLOSED, HConstants.NO_SEQNUM);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      } catch (UnexpectedStateException e) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        // Should never happen.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        throw new RuntimeException(e);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    } else if (exception instanceof RegionServerAbortedException ||<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        exception instanceof RegionServerStoppedException ||<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        exception instanceof ServerNotRunningYetException) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      // TODO<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      // RS is aborting, we cannot offline the region since the region may need to do WAL<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      // recovery. Until we see the RS expiration, we should retry.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      // TODO: This should be suspend like the below where we call expire on server?<a name="line.239"></a>
 <span class="sourceLineNo">240</span>      LOG.info("Ignoring; waiting on ServerCrashProcedure", exception);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      // serverCrashed.set(true);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    } else if (exception instanceof NotServingRegionException) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      LOG.info("IS THIS OK? ANY LOGS TO REPLAY; ACTING AS THOUGH ALL GOOD " + regionNode, exception);<a name="line.243"></a>
+<span class="sourceLineNo">241</span>    } else if (exception instanceof NotServingRegionException) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      LOG.info("IS THIS OK? ANY LOGS TO REPLAY; ACTING AS THOUGH ALL GOOD " + regionNode,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        exception);<a name="line.243"></a>
 <span class="sourceLineNo">244</span>      setTransitionState(RegionTransitionState.REGION_TRANSITION_FINISH);<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    } else {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      // TODO: kill the server in case we get an exception we are not able to handle<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      LOG.warn("Killing server; unexpected exception; " +<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          this + "; " + regionNode.toShortString() +<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        " exception=" + exception);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      env.getMasterServices().getServerManager().expireServer(regionNode.getRegionLocation());<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      serverCrashed.set(true);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  @Override<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  public void toStringClassDetails(StringBuilder sb) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    super.toStringClassDetails(sb);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    sb.append(", server=").append(this.hostingServer);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  @Override<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  public ServerName getServer(final MasterProcedureEnv env) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return this.hostingServer;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  @Override<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    return env.getAssignmentManager().getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>}<a name="line.270"></a>
+<span class="sourceLineNo">246</span>      LOG.warn("Expiring server " + this + "; " + regionNode.toShortString() +<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        ", exception=" + exception);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      env.getMasterServices().getServerManager().expireServer(regionNode.getRegionLocation());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      // Return false so this procedure stays in suspended state. It will be woken up by a<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      // ServerCrashProcedure when it notices this RIT.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      // TODO: Add a SCP as a new subprocedure that we now come to depend on.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      return false;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    return true;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  @Override<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  public void toStringClassDetails(StringBuilder sb) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    super.toStringClassDetails(sb);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    sb.append(", server=").append(this.hostingServer);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>  @Override<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  public ServerName getServer(final MasterProcedureEnv env) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return this.hostingServer;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return env.getAssignmentManager().getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span>}<a name="line.272"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html
index 4ded9e1..106044c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html
@@ -126,7 +126,7 @@
 <span class="sourceLineNo">118</span>        postDisable(env, state);<a name="line.118"></a>
 <span class="sourceLineNo">119</span>        return Flow.NO_MORE_STATE;<a name="line.119"></a>
 <span class="sourceLineNo">120</span>      default:<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.121"></a>
+<span class="sourceLineNo">121</span>        throw new UnsupportedOperationException("Unhandled state=" + state);<a name="line.121"></a>
 <span class="sourceLineNo">122</span>      }<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    } catch (IOException e) {<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      if (isRollbackSupported(state)) {<a name="line.124"></a>
@@ -155,7 +155,7 @@
 <span class="sourceLineNo">147</span>    }<a name="line.147"></a>
 <span class="sourceLineNo">148</span><a name="line.148"></a>
 <span class="sourceLineNo">149</span>    // The delete doesn't have a rollback. The execution will succeed, at some point.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.150"></a>
+<span class="sourceLineNo">150</span>    throw new UnsupportedOperationException("Unhandled state=" + state);<a name="line.150"></a>
 <span class="sourceLineNo">151</span>  }<a name="line.151"></a>
 <span class="sourceLineNo">152</span><a name="line.152"></a>
 <span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
index 4ded9e1..106044c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.html
@@ -126,7 +126,7 @@
 <span class="sourceLineNo">118</span>        postDisable(env, state);<a name="line.118"></a>
 <span class="sourceLineNo">119</span>        return Flow.NO_MORE_STATE;<a name="line.119"></a>
 <span class="sourceLineNo">120</span>      default:<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.121"></a>
+<span class="sourceLineNo">121</span>        throw new UnsupportedOperationException("Unhandled state=" + state);<a name="line.121"></a>
 <span class="sourceLineNo">122</span>      }<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    } catch (IOException e) {<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      if (isRollbackSupported(state)) {<a name="line.124"></a>
@@ -155,7 +155,7 @@
 <span class="sourceLineNo">147</span>    }<a name="line.147"></a>
 <span class="sourceLineNo">148</span><a name="line.148"></a>
 <span class="sourceLineNo">149</span>    // The delete doesn't have a rollback. The execution will succeed, at some point.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.150"></a>
+<span class="sourceLineNo">150</span>    throw new UnsupportedOperationException("Unhandled state=" + state);<a name="line.150"></a>
 <span class="sourceLineNo">151</span>  }<a name="line.151"></a>
 <span class="sourceLineNo">152</span><a name="line.152"></a>
 <span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.AbstractRSRemoteCall.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.AbstractRSRemoteCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.AbstractRSRemoteCall.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.AbstractRSRemoteCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.AbstractRSRemoteCall.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CloseRegionRemoteCall.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CloseRegionRemoteCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CloseRegionRemoteCall.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CloseRegionRemoteCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CloseRegionRemoteCall.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CompatRemoteProcedureResolver.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CompatRemoteProcedureResolver.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CompatRemoteProcedureResolver.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CompatRemoteProcedureResolver.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.CompatRemoteProcedureResolver.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ExecuteProceduresRemoteCall.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ExecuteProceduresRemoteCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ExecuteProceduresRemoteCall.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ExecuteProceduresRemoteCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ExecuteProceduresRemoteCall.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.OpenRegionRemoteCall.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.OpenRegionRemoteCall.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.OpenRegionRemoteCall.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.OpenRegionRemoteCall.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.OpenRegionRemoteCall.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionCloseOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionCloseOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionCloseOperation.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionCloseOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionCloseOperation.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOpenOperation.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOperation.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOperation.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RemoteProcedureResolver.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RemoteProcedureResolver.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RemoteProcedureResolver.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RemoteProcedureResolver.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RemoteProcedureResolver.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ServerOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ServerOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ServerOperation.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ServerOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.ServerOperation.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html
index 75fd10a..57d3543 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">197</span>      }<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
 <span class="sourceLineNo">199</span>      // trying to send the request elsewhere instead<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn(String.format("the request should be tried elsewhere instead; server=%s try=%d",<a name="line.200"></a>
+<span class="sourceLineNo">200</span>      LOG.warn(String.format("Failed dispatch to server=%s try=%d",<a name="line.200"></a>
 <span class="sourceLineNo">201</span>                  serverName, numberOfAttemptsSoFar), e);<a name="line.201"></a>
 <span class="sourceLineNo">202</span>      return false;<a name="line.202"></a>
 <span class="sourceLineNo">203</span>    }<a name="line.203"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashException.html
index a9c5a0c..ea14633 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashException.html
@@ -31,27 +31,28 @@
 <span class="sourceLineNo">023</span><a name="line.23"></a>
 <span class="sourceLineNo">024</span>/**<a name="line.24"></a>
 <span class="sourceLineNo">025</span> * Passed as Exception by {@link ServerCrashProcedure}<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * notifying on-going RIT that server has failed.<a name="line.26"></a>
-<span class="sourceLineNo">027</span> */<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
-<span class="sourceLineNo">029</span>@SuppressWarnings("serial")<a name="line.29"></a>
-<span class="sourceLineNo">030</span>public class ServerCrashException extends HBaseIOException {<a name="line.30"></a>
-<span class="sourceLineNo">031</span>  private final long procId;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  private final ServerName serverName;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>  /**<a name="line.34"></a>
-<span class="sourceLineNo">035</span>   * @param serverName The server that crashed.<a name="line.35"></a>
-<span class="sourceLineNo">036</span>   */<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  public ServerCrashException(long procId, ServerName serverName) {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    this.procId = procId;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    this.serverName = serverName;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  }<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  @Override<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  public String getMessage() {<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    return "ServerCrashProcedure pid=" + this.procId + ", server=" + this.serverName;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  }<a name="line.45"></a>
-<span class="sourceLineNo">046</span>}<a name="line.46"></a>
+<span class="sourceLineNo">026</span> * notifying on-going RIT that server has failed. This exception is less an error-condition than<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * it is a signal to waiting procedures that they can now proceed.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> */<a name="line.28"></a>
+<span class="sourceLineNo">029</span>@InterfaceAudience.Private<a name="line.29"></a>
+<span class="sourceLineNo">030</span>@SuppressWarnings("serial")<a name="line.30"></a>
+<span class="sourceLineNo">031</span>public class ServerCrashException extends HBaseIOException {<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  private final long procId;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>  private final ServerName serverName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  /**<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * @param serverName The server that crashed.<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   */<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  public ServerCrashException(long procId, ServerName serverName) {<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    this.procId = procId;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    this.serverName = serverName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  }<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  @Override<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  public String getMessage() {<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    return "ServerCrashProcedure pid=" + this.procId + ", server=" + this.serverName;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
+<span class="sourceLineNo">047</span>}<a name="line.47"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/346adc37/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
index 991b238..6d36af0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html
@@ -364,48 +364,49 @@
 <span class="sourceLineNo">356</span>   * Handle any outstanding RIT that are up against this.serverName, the crashed server.<a name="line.356"></a>
 <span class="sourceLineNo">357</span>   * Notify them of crash. Remove assign entries from the passed in &lt;code&gt;regions&lt;/code&gt;<a name="line.357"></a>
 <span class="sourceLineNo">358</span>   * otherwise we have two assigns going on and they will fight over who has lock.<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Notify Unassigns also.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @param env<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @param regions Regions that were on crashed server<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private void handleRIT(final MasterProcedureEnv env, final List&lt;HRegionInfo&gt; regions) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    if (regions == null) return;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    final Iterator&lt;HRegionInfo&gt; it = regions.iterator();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    ServerCrashException sce = null;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    while (it.hasNext()) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      final HRegionInfo hri = it.next();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      RegionTransitionProcedure rtp = am.getRegionStates().getRegionTransitionProcedure(hri);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (rtp == null) continue;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      // Make sure the RIT is against this crashed server. In the case where there are many<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      // processings of a crashed server -- backed up for whatever reason (slow WAL split) --<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      // then a previous SCP may have already failed an assign, etc., and it may have a new<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      // location target; DO NOT fail these else we make for assign flux.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      ServerName rtpServerName = rtp.getServer(env);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      if (rtpServerName == null) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        LOG.warn("RIT with ServerName null! " + rtp);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        continue;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      if (!rtpServerName.equals(this.serverName)) continue;<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      LOG.info("pid=" + getProcId() + " found RIT " + rtp + "; " +<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        rtp.getRegionState(env).toShortString());<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      // Notify RIT on server crash.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      if (sce == null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        sce = new ServerCrashException(getProcId(), getServerName());<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      rtp.remoteCallFailed(env, this.serverName, sce);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      if (rtp instanceof AssignProcedure) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        // If an assign, include it in our return and remove from passed-in list of regions.<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        it.remove();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  @Override<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return env.getMasterServices().getMasterMetrics().getServerCrashProcMetrics();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>}<a name="line.400"></a>
+<span class="sourceLineNo">359</span>   * Notify Unassigns. If unable to unassign because server went away, unassigns block waiting<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * on the below callback from a ServerCrashProcedure before proceeding.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @param env<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * @param regions Regions that were on crashed server<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   */<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  private void handleRIT(final MasterProcedureEnv env, final List&lt;HRegionInfo&gt; regions) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (regions == null) return;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    AssignmentManager am = env.getMasterServices().getAssignmentManager();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    final Iterator&lt;HRegionInfo&gt; it = regions.iterator();<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    ServerCrashException sce = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    while (it.hasNext()) {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      final HRegionInfo hri = it.next();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      RegionTransitionProcedure rtp = am.getRegionStates().getRegionTransitionProcedure(hri);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      if (rtp == null) continue;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      // Make sure the RIT is against this crashed server. In the case where there are many<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // processings of a crashed server -- backed up for whatever reason (slow WAL split) --<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      // then a previous SCP may have already failed an assign, etc., and it may have a new<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      // location target; DO NOT fail these else we make for assign flux.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      ServerName rtpServerName = rtp.getServer(env);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      if (rtpServerName == null) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.warn("RIT with ServerName null! " + rtp);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        continue;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      if (!rtpServerName.equals(this.serverName)) continue;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.info("pid=" + getProcId() + " found RIT " + rtp + "; " +<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        rtp.getRegionState(env).toShortString());<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      // Notify RIT on server crash.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (sce == null) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        sce = new ServerCrashException(getProcId(), getServerName());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      rtp.remoteCallFailed(env, this.serverName, sce);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      if (rtp instanceof AssignProcedure) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        // If an assign, include it in our return and remove from passed-in list of regions.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        it.remove();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return env.getMasterServices().getMasterMetrics().getServerCrashProcMetrics();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span>}<a name="line.401"></a>
 
 
 


Mime
View raw message