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> * <p>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> * <p>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> * <p>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> * <p>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 <code>regions</code><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<HRegionInfo> 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<HRegionInfo> 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<HRegionInfo> 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<HRegionInfo> 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>