You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/11/14 14:52:50 UTC

[01/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 5215eb5fd -> 2bd8387fd


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html
new file mode 100644
index 0000000..493b1a1
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.CountDownLatch;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.Future;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.PleaseHoldException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.Put;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Table;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.RegionPlan;<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.procedure2.ProcedureExecutor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.zookeeper.KeeperException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.AfterClass;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.BeforeClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.ClassRule;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.Test;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.experimental.categories.Category;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class TestReportRegionStateTransitionRetry {<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @ClassRule<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    HBaseClassTestRule.forClass(TestReportRegionStateTransitionRetry.class);<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static final AtomicReference&lt;CountDownLatch&gt; RESUME_AND_FAIL = new AtomicReference&lt;&gt;();<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      super(master);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @Override<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      ReportRegionStateTransitionResponse resp = super.reportRegionStateTransition(req);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      CountDownLatch latch = RESUME_AND_FAIL.getAndSet(null);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      if (latch != null) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        try {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>          latch.await();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        } catch (InterruptedException e) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>          throw new RuntimeException(e);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>        }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        throw new PleaseHoldException("Inject error");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      return resp;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public static final class HMasterForTest extends HMaster {<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      super(conf);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>    @Override<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return new AssignmentManagerForTest(master);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static TableName NAME = TableName.valueOf("Retry");<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @BeforeClass<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public static void setUp() throws Exception {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    UTIL.startMiniCluster(1);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    UTIL.createTable(NAME, CF);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    UTIL.waitTableAvailable(NAME);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  @AfterClass<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static void tearDown() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    UTIL.shutdownMiniCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @Test<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void testRetryOnClose() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    CountDownLatch latch = new CountDownLatch(1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    RESUME_AND_FAIL.set(latch);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Future&lt;byte[]&gt; future =<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      am.moveAsync(new RegionPlan(region, rsn.getRegionLocation(), rsn.getRegionLocation()));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    TransitRegionStateProcedure proc =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      procExec.getProcedures().stream().filter(p -&gt; p instanceof TransitRegionStateProcedure)<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p).findAny().get();<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // wait until we schedule the OpenRegionProcedure<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    UTIL.waitFor(10000,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      () -&gt; proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // Fail the reportRegionStateTransition for closing<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    latch.countDown();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    future.get();<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // confirm that the region can still be write<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    try (Table table = UTIL.getConnection().getTableBuilder(NAME, null).setWriteRpcTimeout(1000)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      .setOperationTimeout(2000).build()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      table.put(<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        new Put(Bytes.toBytes("key")).addColumn(CF, Bytes.toBytes("cq"), Bytes.toBytes("val")));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html
new file mode 100644
index 0000000..493b1a1
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.CountDownLatch;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.Future;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.PleaseHoldException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.Put;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Table;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.RegionPlan;<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.procedure2.ProcedureExecutor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.zookeeper.KeeperException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.AfterClass;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.BeforeClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.ClassRule;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.Test;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.experimental.categories.Category;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class TestReportRegionStateTransitionRetry {<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @ClassRule<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    HBaseClassTestRule.forClass(TestReportRegionStateTransitionRetry.class);<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static final AtomicReference&lt;CountDownLatch&gt; RESUME_AND_FAIL = new AtomicReference&lt;&gt;();<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      super(master);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @Override<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      ReportRegionStateTransitionResponse resp = super.reportRegionStateTransition(req);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      CountDownLatch latch = RESUME_AND_FAIL.getAndSet(null);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      if (latch != null) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        try {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>          latch.await();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        } catch (InterruptedException e) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>          throw new RuntimeException(e);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>        }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        throw new PleaseHoldException("Inject error");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      return resp;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public static final class HMasterForTest extends HMaster {<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      super(conf);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>    @Override<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return new AssignmentManagerForTest(master);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static TableName NAME = TableName.valueOf("Retry");<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @BeforeClass<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public static void setUp() throws Exception {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    UTIL.startMiniCluster(1);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    UTIL.createTable(NAME, CF);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    UTIL.waitTableAvailable(NAME);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  @AfterClass<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static void tearDown() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    UTIL.shutdownMiniCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @Test<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void testRetryOnClose() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    CountDownLatch latch = new CountDownLatch(1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    RESUME_AND_FAIL.set(latch);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Future&lt;byte[]&gt; future =<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      am.moveAsync(new RegionPlan(region, rsn.getRegionLocation(), rsn.getRegionLocation()));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    TransitRegionStateProcedure proc =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      procExec.getProcedures().stream().filter(p -&gt; p instanceof TransitRegionStateProcedure)<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p).findAny().get();<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // wait until we schedule the OpenRegionProcedure<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    UTIL.waitFor(10000,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      () -&gt; proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // Fail the reportRegionStateTransition for closing<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    latch.countDown();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    future.get();<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // confirm that the region can still be write<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    try (Table table = UTIL.getConnection().getTableBuilder(NAME, null).setWriteRpcTimeout(1000)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      .setOperationTimeout(2000).build()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      table.put(<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        new Put(Bytes.toBytes("key")).addColumn(CF, Bytes.toBytes("cq"), Bytes.toBytes("val")));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[24/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
index 10b855a..a961c23 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
@@ -63,705 +63,706 @@
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.55"></a>
 <span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.56"></a>
 <span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.slf4j.Logger;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.slf4j.LoggerFactory;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>/**<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * A collection for methods used by multiple classes to backup HBase tables.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
-<span class="sourceLineNo">070</span>public final class BackupUtils {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected static final Logger LOG = LoggerFactory.getLogger(BackupUtils.class);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static final String LOGNAME_SEPARATOR = ".";<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  public static final int MILLISEC_IN_HOUR = 3600000;<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private BackupUtils() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    throw new AssertionError("Instantiating utility class...");<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Loop through the RS log timestamp map for the tables, for each RS, find the min timestamp value<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * for the RS among the tables.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param rsLogTimestampMap timestamp map<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @return the min timestamp of each RS<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static HashMap&lt;String, Long&gt; getRSLogTimestampMins(<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; rsLogTimestampMap) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    if (rsLogTimestampMap == null || rsLogTimestampMap.isEmpty()) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return null;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>    HashMap&lt;String, Long&gt; rsLogTimestampMins = new HashMap&lt;&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    HashMap&lt;String, HashMap&lt;TableName, Long&gt;&gt; rsLogTimestampMapByRS = new HashMap&lt;&gt;();<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    for (Entry&lt;TableName, HashMap&lt;String, Long&gt;&gt; tableEntry : rsLogTimestampMap.entrySet()) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      TableName table = tableEntry.getKey();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      HashMap&lt;String, Long&gt; rsLogTimestamp = tableEntry.getValue();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      for (Entry&lt;String, Long&gt; rsEntry : rsLogTimestamp.entrySet()) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        String rs = rsEntry.getKey();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        Long ts = rsEntry.getValue();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        if (!rsLogTimestampMapByRS.containsKey(rs)) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          rsLogTimestampMapByRS.put(rs, new HashMap&lt;&gt;());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>          rsLogTimestampMapByRS.get(rs).put(table, ts);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        } else {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          rsLogTimestampMapByRS.get(rs).put(table, ts);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>    for (Entry&lt;String, HashMap&lt;TableName, Long&gt;&gt; entry : rsLogTimestampMapByRS.entrySet()) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      String rs = entry.getKey();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      rsLogTimestampMins.put(rs, BackupUtils.getMinValue(entry.getValue()));<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>    return rsLogTimestampMins;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * copy out Table RegionInfo into incremental backup image need to consider move this logic into<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * HBackupFileSystem<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param conn connection<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @param backupInfo backup info<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @param conf configuration<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @throws IOException exception<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public static void copyTableRegionInfo(Connection conn, BackupInfo backupInfo, Configuration conf)<a name="line.125"></a>
-<span class="sourceLineNo">126</span>          throws IOException {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    FileSystem fs = rootDir.getFileSystem(conf);<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // for each table in the table set, copy out the table info and region<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // info files in the correct directory structure<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    for (TableName table : backupInfo.getTables()) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      if (!MetaTableAccessor.tableExists(conn, table)) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        LOG.warn("Table " + table + " does not exists, skipping it.");<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        continue;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      TableDescriptor orig = FSTableDescriptors.getTableDescriptorFromFs(fs, rootDir, table);<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>      // write a copy of descriptor to the target directory<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      Path target = new Path(backupInfo.getTableBackupDir(table));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      FileSystem targetFs = target.getFileSystem(conf);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      FSTableDescriptors descriptors =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>          new FSTableDescriptors(conf, targetFs, FSUtils.getRootDir(conf));<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      descriptors.createTableDescriptorForTableDirectory(target, orig, false);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      LOG.debug("Attempting to copy table info for:" + table + " target: " + target<a name="line.145"></a>
-<span class="sourceLineNo">146</span>          + " descriptor: " + orig);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      LOG.debug("Finished copying tableinfo.");<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      List&lt;RegionInfo&gt; regions = MetaTableAccessor.getTableRegions(conn, table);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      // For each region, write the region info to disk<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      LOG.debug("Starting to write region info for table " + table);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      for (RegionInfo regionInfo : regions) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        Path regionDir =<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            HRegion.getRegionDir(new Path(backupInfo.getTableBackupDir(table)), regionInfo);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        regionDir = new Path(backupInfo.getTableBackupDir(table), regionDir.getName());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        writeRegioninfoOnFilesystem(conf, targetFs, regionDir, regionInfo);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      LOG.debug("Finished writing region info for table " + table);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  /**<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * Write the .regioninfo file on-disk.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public static void writeRegioninfoOnFilesystem(final Configuration conf, final FileSystem fs,<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      final Path regionInfoDir, RegionInfo regionInfo) throws IOException {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    final byte[] content = RegionInfo.toDelimitedByteArray(regionInfo);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    Path regionInfoFile = new Path(regionInfoDir, "." + HConstants.REGIONINFO_QUALIFIER_STR);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // First check to get the permissions<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    FsPermission perms = FSUtils.getFilePermissions(fs, conf, HConstants.DATA_FILE_UMASK_KEY);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    // Write the RegionInfo file content<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    FSDataOutputStream out = FSUtils.create(conf, fs, regionInfoFile, perms, null);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    try {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      out.write(content);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    } finally {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      out.close();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    }<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Parses hostname:port from WAL file path<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * @param p path to WAL file<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * @return hostname:port<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public static String parseHostNameFromLogFile(Path p) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      if (AbstractFSWALProvider.isArchivedLogFile(p)) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return BackupUtils.parseHostFromOldLog(p);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      } else {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        ServerName sname = AbstractFSWALProvider.getServerNameFromWALDirectoryName(p);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        if (sname != null) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          return sname.getAddress().toString();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        } else {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          LOG.error("Skip log file (can't parse): " + p);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          return null;<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>    } catch (Exception e) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      LOG.error("Skip log file (can't parse): " + p, e);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      return null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<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>  /**<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Returns WAL file name<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param walFileName WAL file name<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @return WAL file name<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public static String getUniqueWALFileNamePart(String walFileName) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    return getUniqueWALFileNamePart(new Path(walFileName));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Returns WAL file name<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param p WAL file path<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @return WAL file name<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public static String getUniqueWALFileNamePart(Path p) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    return p.getName();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  /**<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * Get the total length of files under the given directory recursively.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs The hadoop file system<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param dir The target directory<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @return the total length of files<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @throws IOException exception<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  public static long getFilesLength(FileSystem fs, Path dir) throws IOException {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    long totalLength = 0;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    FileStatus[] files = FSUtils.listStatus(fs, dir);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    if (files != null) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      for (FileStatus fileStatus : files) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        if (fileStatus.isDirectory()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          totalLength += getFilesLength(fs, fileStatus.getPath());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        } else {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          totalLength += fileStatus.getLen();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return totalLength;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * Get list of all old WAL files (WALs and archive)<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * @param c configuration<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * @param hostTimestampMap {host,timestamp} map<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * @return list of WAL files<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * @throws IOException exception<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public static List&lt;String&gt; getWALFilesOlderThan(final Configuration c,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      final HashMap&lt;String, Long&gt; hostTimestampMap) throws IOException {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    Path rootDir = FSUtils.getRootDir(c);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    Path logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    Path oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    List&lt;String&gt; logFiles = new ArrayList&lt;&gt;();<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>    PathFilter filter = p -&gt; {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      try {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        if (AbstractFSWALProvider.isMetaFile(p)) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          return false;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        String host = parseHostNameFromLogFile(p);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (host == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          return false;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        Long oldTimestamp = hostTimestampMap.get(host);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        Long currentLogTS = BackupUtils.getCreationTime(p);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        return currentLogTS &lt;= oldTimestamp;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } catch (Exception e) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        LOG.warn("Can not parse" + p, e);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        return false;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    };<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    FileSystem fs = FileSystem.get(c);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    logFiles = BackupUtils.getFiles(fs, logDir, logFiles, filter);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    logFiles = BackupUtils.getFiles(fs, oldLogDir, logFiles, filter);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return logFiles;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public static TableName[] parseTableNames(String tables) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (tables == null) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    String[] tableArray = tables.split(BackupRestoreConstants.TABLENAME_DELIMITER_IN_COMMAND);<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>    TableName[] ret = new TableName[tableArray.length];<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    for (int i = 0; i &lt; tableArray.length; i++) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      ret[i] = TableName.valueOf(tableArray[i]);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return ret;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * Check whether the backup path exist<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param backupStr backup<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @param conf configuration<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return Yes if path exists<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws IOException exception<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public static boolean checkPathExist(String backupStr, Configuration conf) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    boolean isExist = false;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Path backupPath = new Path(backupStr);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    FileSystem fileSys = backupPath.getFileSystem(conf);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    String targetFsScheme = fileSys.getUri().getScheme();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    if (LOG.isTraceEnabled()) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      LOG.trace("Schema of given url: " + backupStr + " is: " + targetFsScheme);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    if (fileSys.exists(backupPath)) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      isExist = true;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    return isExist;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Check target path first, confirm it doesn't exist before backup<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @param backupRootPath backup destination path<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * @param conf configuration<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * @throws IOException exception<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public static void checkTargetDir(String backupRootPath, Configuration conf) throws IOException {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    boolean targetExists;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      targetExists = checkPathExist(backupRootPath, conf);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    } catch (IOException e) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      String expMsg = e.getMessage();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      String newMsg = null;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      if (expMsg.contains("No FileSystem for scheme")) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        newMsg =<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            "Unsupported filesystem scheme found in the backup target url. Error Message: "<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                + expMsg;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        LOG.error(newMsg);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        throw new IOException(newMsg);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      } else {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        throw e;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (targetExists) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      LOG.info("Using existing backup root dir: " + backupRootPath);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } else {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      LOG.info("Backup root dir " + backupRootPath + " does not exist. Will be created.");<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Get the min value for all the Values a map.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @param map map<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @return the min value<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public static &lt;T&gt; Long getMinValue(HashMap&lt;T, Long&gt; map) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    Long minTimestamp = null;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (map != null) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      ArrayList&lt;Long&gt; timestampList = new ArrayList&lt;&gt;(map.values());<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      Collections.sort(timestampList);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // The min among all the RS log timestamps will be kept in backup system table table.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      minTimestamp = timestampList.get(0);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    return minTimestamp;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  /**<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Parses host name:port from archived WAL path<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param p path<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @return host name<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static String parseHostFromOldLog(Path p) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    try {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      String n = p.getName();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      int idx = n.lastIndexOf(LOGNAME_SEPARATOR);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      String s = URLDecoder.decode(n.substring(0, idx), "UTF8");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return ServerName.parseHostname(s) + ":" + ServerName.parsePort(s);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (Exception e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      LOG.warn("Skip log file (can't parse): " + p);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      return null;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Given the log file, parse the timestamp from the file name. The timestamp is the last number.<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * @param p a path to the log file<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @return the timestamp<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @throws IOException exception<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public static Long getCreationTime(Path p) throws IOException {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    int idx = p.getName().lastIndexOf(LOGNAME_SEPARATOR);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    if (idx &lt; 0) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      throw new IOException("Cannot parse timestamp from path " + p);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    String ts = p.getName().substring(idx + 1);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return Long.parseLong(ts);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public static List&lt;String&gt; getFiles(FileSystem fs, Path rootDir, List&lt;String&gt; files,<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      PathFilter filter) throws IOException {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(rootDir, true);<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>    while (it.hasNext()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      LocatedFileStatus lfs = it.next();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      if (lfs.isDirectory()) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      }<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      // apply filter<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (filter.accept(lfs.getPath())) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        files.add(lfs.getPath().toString());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    return files;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  }<a name="line.408"></a>
-<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>  public static void cleanupBackupData(BackupInfo context, Configuration conf) throws IOException {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    cleanupHLogDir(context, conf);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    cleanupTargetDir(context, conf);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>  /**<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * Clean up directories which are generated when DistCp copying hlogs<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @param backupInfo backup info<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * @param conf configuration<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * @throws IOException exception<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static void cleanupHLogDir(BackupInfo backupInfo, Configuration conf) throws IOException {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    String logDir = backupInfo.getHLogTargetDir();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    if (logDir == null) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      LOG.warn("No log directory specified for " + backupInfo.getBackupId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      return;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path rootPath = new Path(logDir).getParent();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    FileSystem fs = FileSystem.get(rootPath.toUri(), conf);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    FileStatus[] files = listStatus(fs, rootPath, null);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (files == null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (FileStatus file : files) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      LOG.debug("Delete log files: " + file.getPath().getName());<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      fs.delete(file.getPath(), true);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private static void cleanupTargetDir(BackupInfo backupInfo, Configuration conf) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      // clean up the data at target directory<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      LOG.debug("Trying to cleanup up target dir : " + backupInfo.getBackupId());<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      String targetDir = backupInfo.getBackupRootDir();<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      if (targetDir == null) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("No target directory specified for " + backupInfo.getBackupId());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        return;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>      FileSystem outputFs = FileSystem.get(new Path(backupInfo.getBackupRootDir()).toUri(), conf);<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>      for (TableName table : backupInfo.getTables()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        Path targetDirPath =<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            new Path(getTableBackupDir(backupInfo.getBackupRootDir(), backupInfo.getBackupId(),<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              table));<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (outputFs.delete(targetDirPath, true)) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          LOG.info("Cleaning up backup data at " + targetDirPath.toString() + " done.");<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          LOG.info("No data has been found in " + targetDirPath.toString() + ".");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>        Path tableDir = targetDirPath.getParent();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        FileStatus[] backups = listStatus(outputFs, tableDir, null);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        if (backups == null || backups.length == 0) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>          outputFs.delete(tableDir, true);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          LOG.debug(tableDir.toString() + " is empty, remove it.");<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      outputFs.delete(new Path(targetDir, backupInfo.getBackupId()), true);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    } catch (IOException e1) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      LOG.error("Cleaning up backup data of " + backupInfo.getBackupId() + " at "<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          + backupInfo.getBackupRootDir() + " failed due to " + e1.getMessage() + ".");<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * Given the backup root dir, backup id and the table name, return the backup image location,<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * which is also where the backup manifest file is. return value look like:<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * "hdfs://backup.hbase.org:9000/user/biadmin/backup1/backup_1396650096738/default/t1_dn/"<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @param backupRootDir backup root directory<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param backupId backup id<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param tableName table name<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @return backupPath String for the particular table<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public static String getTableBackupDir(String backupRootDir, String backupId,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          TableName tableName) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return backupRootDir + Path.SEPARATOR + backupId + Path.SEPARATOR<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        + tableName.getNamespaceAsString() + Path.SEPARATOR + tableName.getQualifierAsString()<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        + Path.SEPARATOR;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  }<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span>  /**<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * Sort history list by start time in descending order.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param historyList history list<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * @return sorted list of BackupCompleteData<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public static ArrayList&lt;BackupInfo&gt; sortHistoryListDesc(ArrayList&lt;BackupInfo&gt; historyList) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    ArrayList&lt;BackupInfo&gt; list = new ArrayList&lt;&gt;();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    TreeMap&lt;String, BackupInfo&gt; map = new TreeMap&lt;&gt;();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    for (BackupInfo h : historyList) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      map.put(Long.toString(h.getStartTs()), h);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    Iterator&lt;String&gt; i = map.descendingKeySet().iterator();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    while (i.hasNext()) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      list.add(map.get(i.next()));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    return list;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>  /**<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * Calls fs.listStatus() and treats FileNotFoundException as non-fatal This accommodates<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * differences between hadoop versions, where hadoop 1 does not throw a FileNotFoundException, and<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * return an empty FileStatus[] while Hadoop 2 will throw FileNotFoundException.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param fs file system<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param dir directory<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @param filter path filter<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @return null if dir is empty or doesn't exist, otherwise FileStatus array<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  public static FileStatus[] listStatus(final FileSystem fs, final Path dir,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>          final PathFilter filter) throws IOException {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    FileStatus[] status = null;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    try {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      status = filter == null ? fs.listStatus(dir) : fs.listStatus(dir, filter);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    } catch (FileNotFoundException fnfe) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      // if directory doesn't exist, return null<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      if (LOG.isTraceEnabled()) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        LOG.trace(dir + " doesn't exist");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    if (status == null || status.length &lt; 1) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      return null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    return status;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>  /**<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Return the 'path' component of a Path. In Hadoop, Path is an URI. This method returns the<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * 'path' component of a Path's URI: e.g. If a Path is<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;, this method returns<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;. This method is useful if you want to print<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * out a Path without qualifying Filesystem instance.<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param p file system Path whose 'path' component we are to return.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @return Path portion of the Filesystem<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  public static String getPath(Path p) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    return p.toUri().getPath();<a name="line.548"></a>
-<span class="sourceLineNo">549</span>  }<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span>  /**<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * Given the backup root dir and the backup id, return the log file location for an incremental<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   * backup.<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * @param backupRootDir backup root directory<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * @param backupId backup id<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * @return logBackupDir: ".../user/biadmin/backup1/WALs/backup_1396650096738"<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   */<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public static String getLogBackupDir(String backupRootDir, String backupId) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    return backupRootDir + Path.SEPARATOR + backupId + Path.SEPARATOR<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        + HConstants.HREGION_LOGDIR_NAME;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  private static List&lt;BackupInfo&gt; getHistory(Configuration conf, Path backupRootPath)<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      throws IOException {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    // Get all (n) history from backup root destination<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span>    FileSystem fs = FileSystem.get(backupRootPath.toUri(), conf);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listLocatedStatus(backupRootPath);<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>    List&lt;BackupInfo&gt; infos = new ArrayList&lt;&gt;();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    while (it.hasNext()) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      LocatedFileStatus lfs = it.next();<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>      if (!lfs.isDirectory()) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        continue;<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>      String backupId = lfs.getPath().getName();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      try {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        BackupInfo info = loadBackupInfo(backupRootPath, backupId, fs);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        infos.add(info);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      } catch (IOException e) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        LOG.error("Can not load backup info from: " + lfs.getPath(), e);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    // Sort<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    Collections.sort(infos, new Comparator&lt;BackupInfo&gt;() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      @Override<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      public int compare(BackupInfo o1, BackupInfo o2) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        long ts1 = getTimestamp(o1.getBackupId());<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        long ts2 = getTimestamp(o2.getBackupId());<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>        if (ts1 == ts2) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          return 0;<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>        return ts1 &lt; ts2 ? 1 : -1;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      private long getTimestamp(String backupId) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>        String[] split = backupId.split("_");<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        return Long.parseLong(split[1]);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    });<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    return infos;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public static List&lt;BackupInfo&gt; getHistory(Configuration conf, int n, Path backupRootPath,<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      BackupInfo.Filter... filters) throws IOException {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    List&lt;BackupInfo&gt; infos = getHistory(conf, backupRootPath);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    List&lt;BackupInfo&gt; ret = new ArrayList&lt;&gt;();<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    for (BackupInfo info : infos) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      if (ret.size() == n) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        break;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      boolean passed = true;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      for (int i = 0; i &lt; filters.length; i++) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        if (!filters[i].apply(info)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>          passed = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          break;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      }<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      if (passed) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        ret.add(info);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    return ret;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public static BackupInfo loadBackupInfo(Path backupRootPath, String backupId, FileSystem fs)<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      throws IOException {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Path backupPath = new Path(backupRootPath, backupId);<a name="line.632"></a>
-<span class="sourceLineNo">633</span><a name="line.633"></a>
-<span class="sourceLineNo">634</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(backupPath, true);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    while (it.hasNext()) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      LocatedFileStatus lfs = it.next();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (lfs.getPath().getName().equals(BackupManifest.MANIFEST_FILE_NAME)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // Load BackupManifest<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        BackupManifest manifest = new BackupManifest(fs, lfs.getPath().getParent());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        BackupInfo info = manifest.toBackupInfo();<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        return info;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return null;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Create restore request.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param backupRootDir backup root dir<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @param backupId backup id<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * @param check check only<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * @param fromTables table list from<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * @param toTables table list to<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param isOverwrite overwrite data<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @return request obkect<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  public static RestoreRequest createRestoreRequest(String backupRootDir, String backupId,<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      boolean check, TableName[] fromTables, TableName[] toTables, boolean isOverwrite) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    RestoreRequest.Builder builder = new RestoreRequest.Builder();<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    RestoreRequest request =<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        builder.withBackupRootDir(backupRootDir).withBackupId(backupId).withCheck(check)<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            .withFromTables(fromTables).withToTables(toTables).withOvewrite(isOverwrite).build();<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    return request;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public static boolean validate(HashMap&lt;TableName, BackupManifest&gt; backupManifestMap,<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      Configuration conf) throws IOException {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    boolean isValid = true;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>    for (Entry&lt;TableName, BackupManifest&gt; manifestEntry : backupManifestMap.entrySet()) {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      TableName table = manifestEntry.getKey();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      TreeSet&lt;BackupImage&gt; imageSet = new TreeSet&lt;&gt;();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>      ArrayList&lt;BackupImage&gt; depList = manifestEntry.getValue().getDependentListByTable(table);<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      if (depList != null &amp;&amp; !depList.isEmpty()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        imageSet.addAll(depList);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      }<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      LOG.info("Dependent image(s) from old to new:");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      for (BackupImage image : imageSet) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        String imageDir =<a name="line.681"></a>
-<span class="sourceLineNo">682</span>            HBackupFileSystem.getTableBackupDir(image.getRootDir(), image.getBackupId(), table);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        if (!BackupUtils.checkPathExist(imageDir, conf)) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          LOG.error("ERROR: backup image does not exist: " + imageDir);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          isValid = false;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          break;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>        }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        LOG.info("Backup image: " + image.getBackupId() + " for '" + table + "' is available");<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      }<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    return isValid;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>  public static Path getBulkOutputDir(String tableName, Configuration conf, boolean deleteOnExit)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      throws IOException {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    FileSystem fs = FileSystem.get(conf);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    String tmp = conf.get(HConstants.TEMPORARY_FS_DIRECTORY_KEY,<a name="line.697"></a>
-<span class="sourceLineNo">698</span>            fs.getHomeDirectory() + "/hbase-staging");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    Path path =<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        new Path(tmp + Path.SEPARATOR + "bulk_output-" + tableName + "-"<a name="line.700"></a>
-<span class="sourceLineNo">701</span>            + EnvironmentEdgeManager.currentTime());<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    if (deleteOnExit) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      fs.deleteOnExit(path);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return path;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  public static Path getBulkOutputDir(String tableName, Configuration conf) throws IOException {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    return getBulkOutputDir(tableName, conf, true);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>  }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public static String getFileNameCompatibleString(TableName table) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    return table.getNamespaceAsString() + "-" + table.getQualifierAsString();<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  public static boolean failed(int result) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    return result != 0;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  public static boolean succeeded(int result) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    return result == 0;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  public static LoadIncrementalHFiles createLoader(Configuration config) throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    // set configuration for restore:<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    // LoadIncrementalHFile needs more time<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    // &lt;name&gt;hbase.rpc.timeout&lt;/name&gt; &lt;value&gt;600000&lt;/value&gt;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    // calculates<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    Configuration conf = new Configuration(config);<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, MILLISEC_IN_HOUR);<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span>    // By default, it is 32 and loader will fail if # of files in any region exceed this<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    // limit. Bad for snapshot restore.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    conf.setInt(LoadIncrementalHFiles.MAX_FILES_PER_REGION_PER_FAMILY, Integer.MAX_VALUE);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    conf.set(LoadIncrementalHFiles.IGNORE_UNMATCHED_CF_CONF_KEY, "yes");<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    LoadIncrementalHFiles loader;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    try {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      loader = new LoadIncrementalHFiles(conf);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    } catch (Exception e) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      throw new IOException(e);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    return loader;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>  }<a name="line.743"></a>
-<span class="sourceLineNo">744</span><a name="line.744"></a>
-<span class="sourceLineNo">745</span>  public static String findMostRecentBackupId(String[] backupIds) {<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    long recentTimestamp = Long.MIN_VALUE;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    for (String backupId : backupIds) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      long ts = Long.parseLong(backupId.split("_")[1]);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      if (ts &gt; recentTimestamp) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        recentTimestamp = ts;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    }<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return BackupRestoreConstants.BACKUPID_PREFIX + recentTimestamp;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>}<a name="line.756"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * A collection for methods used by multiple classes to backup HBase tables.<a name="line.68"></a>
+<span class="sourceLineNo">069</span> */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
+<span class="sourceLineNo">071</span>public final class BackupUtils {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  protected static final Logger LOG = LoggerFactory.getLogger(BackupUtils.class);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final String LOGNAME_SEPARATOR = ".";<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public static final int MILLISEC_IN_HOUR = 3600000;<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private BackupUtils() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    throw new AssertionError("Instantiating utility class...");<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Loop through the RS log timestamp map for the tables, for each RS, find the min timestamp value<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * for the RS among the tables.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @param rsLogTimestampMap timestamp map<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @return the min timestamp of each RS<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public static HashMap&lt;String, Long&gt; getRSLogTimestampMins(<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; rsLogTimestampMap) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    if (rsLogTimestampMap == null || rsLogTimestampMap.isEmpty()) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return null;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    HashMap&lt;String, Long&gt; rsLogTimestampMins = new HashMap&lt;&gt;();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    HashMap&lt;String, HashMap&lt;TableName, Long&gt;&gt; rsLogTimestampMapByRS = new HashMap&lt;&gt;();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    for (Entry&lt;TableName, HashMap&lt;String, Long&gt;&gt; tableEntry : rsLogTimestampMap.entrySet()) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      TableName table = tableEntry.getKey();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      HashMap&lt;String, Long&gt; rsLogTimestamp = tableEntry.getValue();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      for (Entry&lt;String, Long&gt; rsEntry : rsLogTimestamp.entrySet()) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        String rs = rsEntry.getKey();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        Long ts = rsEntry.getValue();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        if (!rsLogTimestampMapByRS.containsKey(rs)) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          rsLogTimestampMapByRS.put(rs, new HashMap&lt;&gt;());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          rsLogTimestampMapByRS.get(rs).put(table, ts);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        } else {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>          rsLogTimestampMapByRS.get(rs).put(table, ts);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    for (Entry&lt;String, HashMap&lt;TableName, Long&gt;&gt; entry : rsLogTimestampMapByRS.entrySet()) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      String rs = entry.getKey();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      rsLogTimestampMins.put(rs, BackupUtils.getMinValue(entry.getValue()));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return rsLogTimestampMins;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<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>   * copy out Table RegionInfo into incremental backup image need to consider move this logic into<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * HBackupFileSystem<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param conn connection<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @param backupInfo backup info<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @param conf configuration<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @throws IOException exception<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public static void copyTableRegionInfo(Connection conn, BackupInfo backupInfo, Configuration conf)<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          throws IOException {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    FileSystem fs = rootDir.getFileSystem(conf);<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // for each table in the table set, copy out the table info and region<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // info files in the correct directory structure<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (TableName table : backupInfo.getTables()) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      if (!MetaTableAccessor.tableExists(conn, table)) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        LOG.warn("Table " + table + " does not exists, skipping it.");<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        continue;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      TableDescriptor orig = FSTableDescriptors.getTableDescriptorFromFs(fs, rootDir, table);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>      // write a copy of descriptor to the target directory<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      Path target = new Path(backupInfo.getTableBackupDir(table));<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      FileSystem targetFs = target.getFileSystem(conf);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      FSTableDescriptors descriptors =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          new FSTableDescriptors(conf, targetFs, FSUtils.getRootDir(conf));<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      descriptors.createTableDescriptorForTableDirectory(target, orig, false);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.debug("Attempting to copy table info for:" + table + " target: " + target<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          + " descriptor: " + orig);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      LOG.debug("Finished copying tableinfo.");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      List&lt;RegionInfo&gt; regions = MetaTableAccessor.getTableRegions(conn, table);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      // For each region, write the region info to disk<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      LOG.debug("Starting to write region info for table " + table);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      for (RegionInfo regionInfo : regions) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        Path regionDir =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>            HRegion.getRegionDir(new Path(backupInfo.getTableBackupDir(table)), regionInfo);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        regionDir = new Path(backupInfo.getTableBackupDir(table), regionDir.getName());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        writeRegioninfoOnFilesystem(conf, targetFs, regionDir, regionInfo);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      LOG.debug("Finished writing region info for table " + table);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  /**<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * Write the .regioninfo file on-disk.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public static void writeRegioninfoOnFilesystem(final Configuration conf, final FileSystem fs,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      final Path regionInfoDir, RegionInfo regionInfo) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    final byte[] content = RegionInfo.toDelimitedByteArray(regionInfo);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    Path regionInfoFile = new Path(regionInfoDir, "." + HConstants.REGIONINFO_QUALIFIER_STR);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // First check to get the permissions<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    FsPermission perms = FSUtils.getFilePermissions(fs, conf, HConstants.DATA_FILE_UMASK_KEY);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // Write the RegionInfo file content<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    FSDataOutputStream out = FSUtils.create(conf, fs, regionInfoFile, perms, null);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      out.write(content);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    } finally {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      out.close();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Parses hostname:port from WAL file path<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param p path to WAL file<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @return hostname:port<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public static String parseHostNameFromLogFile(Path p) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      if (AbstractFSWALProvider.isArchivedLogFile(p)) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        return BackupUtils.parseHostFromOldLog(p);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      } else {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        ServerName sname = AbstractFSWALProvider.getServerNameFromWALDirectoryName(p);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        if (sname != null) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          return sname.getAddress().toString();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        } else {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          LOG.error("Skip log file (can't parse): " + p);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          return null;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    } catch (Exception e) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      LOG.error("Skip log file (can't parse): " + p, e);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      return null;<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><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * Returns WAL file name<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param walFileName WAL file name<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @return WAL file name<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public static String getUniqueWALFileNamePart(String walFileName) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    return getUniqueWALFileNamePart(new Path(walFileName));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Returns WAL file name<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param p WAL file path<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @return WAL file name<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  public static String getUniqueWALFileNamePart(Path p) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return p.getName();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * Get the total length of files under the given directory recursively.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param fs The hadoop file system<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param dir The target directory<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @return the total length of files<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @throws IOException exception<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  public static long getFilesLength(FileSystem fs, Path dir) throws IOException {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    long totalLength = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    FileStatus[] files = FSUtils.listStatus(fs, dir);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    if (files != null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      for (FileStatus fileStatus : files) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (fileStatus.isDirectory()) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          totalLength += getFilesLength(fs, fileStatus.getPath());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        } else {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          totalLength += fileStatus.getLen();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return totalLength;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Get list of all old WAL files (WALs and archive)<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @param c configuration<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * @param hostTimestampMap {host,timestamp} map<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @return list of WAL files<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @throws IOException exception<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public static List&lt;String&gt; getWALFilesOlderThan(final Configuration c,<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      final HashMap&lt;String, Long&gt; hostTimestampMap) throws IOException {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    Path walRootDir = CommonFSUtils.getWALRootDir(c);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    Path logDir = new Path(walRootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    List&lt;String&gt; logFiles = new ArrayList&lt;&gt;();<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    PathFilter filter = p -&gt; {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      try {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        if (AbstractFSWALProvider.isMetaFile(p)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          return false;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        String host = parseHostNameFromLogFile(p);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        if (host == null) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          return false;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        Long oldTimestamp = hostTimestampMap.get(host);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        Long currentLogTS = BackupUtils.getCreat

<TRUNCATED>

[06/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[28/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index 47e6433..3797698 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -4342,18 +4342,24 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#isOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">isOpening</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+         <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+         org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplit-org.apache.hadoop.hbase.ServerName-">logSplit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Called after we've split all logs on a crashed Server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#logSplitting-org.apache.hadoop.hbase.ServerName-">logSplitting</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Call this when we start log splitting for a crashed Server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsMerged-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">markRegionAsMerged</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
                   <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
@@ -4362,81 +4368,81 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block">When called here, the merge has happened.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#markRegionAsSplit-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-">markRegionAsSplit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
                  <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                  <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterA,
                  <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;daughterB)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStateStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateStore.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">mergeRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;child,
             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriA,
             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hriB,
             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#metaLogSplit-org.apache.hadoop.hbase.ServerName-">metaLogSplit</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Called after we've split the meta logs on a crashed Server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#metaLogSplitting-org.apache.hadoop.hbase.ServerName-">metaLogSplitting</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block">Call this when we start meta log splitting a crashed Server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#move-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">move</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
     <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
     <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#onlineRegion-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">onlineRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>
 <td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">remoteCallBuild</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AssignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html#remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">remoteCallBuild</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>
 <td class="colLast"><span class="typeNameLabel">CloseRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/CloseRegionProcedure.html#remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">remoteCallBuild</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;remote)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>
 <td class="colLast"><span class="typeNameLabel">OpenRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/OpenRegionProcedure.html#remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">remoteCallBuild</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;remote)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>abstract <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#remoteCallBuild-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-">remoteCallBuild</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionRemoteProcedureBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">remoteCallFailed</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;remote,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;exception)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">remoteCallFailed</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
@@ -4444,30 +4450,30 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeRegionFromServer-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">removeRegionFromServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                       <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeServer-org.apache.hadoop.hbase.ServerName-">removeServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManagerUtil.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManagerUtil.html#reopenRegionsForRollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-java.util.List-int-org.apache.hadoop.hbase.ServerName-">reopenRegionsForRollback</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                         int&nbsp;regionReplication,
                         <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>
 <div class="block">The master will call this method when the RS send the regionServerReport().</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -4475,20 +4481,24 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
                 org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
                 long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">reportTransitionClosed</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionClosed</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                       <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
+                      <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionFailedOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionFailedOpen</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                          <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                          <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpened-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransitionOpened</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                      <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
-                      long&nbsp;openSeqNum)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-long-">reportTransitionOpen</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                    <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+                    long&nbsp;openSeqNum)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index d4aa23c..a9f1b7a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ae0124e..ce950b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 84ed62f..92f4246 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 0ae5ae6..27cacca 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -275,10 +275,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 7557e4f..c12ae36 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,9 +353,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 2061ab3..deb19ba 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>


[10/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[07/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[19/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
index 061fb58..e9fb928 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.549">TestAssignmentManagerBase.MockRSProcedureDispatcher</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.552">TestAssignmentManagerBase.MockRSProcedureDispatcher</a>
 extends org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher</pre>
 </li>
 </ul>
@@ -288,7 +288,7 @@ extends org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>mockRsExec</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSExecutor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.550">mockRsExec</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSExecutor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.553">mockRsExec</a></pre>
 </li>
 </ul>
 </li>
@@ -305,7 +305,7 @@ extends org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MockRSProcedureDispatcher</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.552">MockRSProcedureDispatcher</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.555">MockRSProcedureDispatcher</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
 </li>
 </ul>
 </li>
@@ -322,7 +322,7 @@ extends org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setMockRsExecutor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.556">setMockRsExecutor</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSExecutor</a>&nbsp;mockRsExec)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.559">setMockRsExecutor</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSExecutor</a>&nbsp;mockRsExec)</pre>
 </li>
 </ul>
 <a name="remoteDispatch-org.apache.hadoop.hbase.ServerName-java.util.Set-">
@@ -331,7 +331,7 @@ extends org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>remoteDispatch</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.561">remoteDispatch</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.564">remoteDispatch</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure&gt;&nbsp;remoteProcedures)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
index 2c56c13..979ddfe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.478">TestAssignmentManagerBase.RandRsExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.481">TestAssignmentManagerBase.RandRsExecutor</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.NoopRsExecutor</a></pre>
 </li>
 </ul>
@@ -223,7 +223,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rand</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.479">rand</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.482">rand</a></pre>
 </li>
 </ul>
 </li>
@@ -240,7 +240,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandRsExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.478">RandRsExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.481">RandRsExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -257,7 +257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>sendRequest</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.482">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.485">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
                                                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -276,7 +276,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>execOpenRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.498">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.501">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo&nbsp;openReq)
                                                                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -293,7 +293,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execCloseRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.531">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.534">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                             byte[]&nbsp;regionName)
                                                                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
index 2b028cd..4f5922f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.314">TestAssignmentManagerBase.ServerNotYetRunningRsExecutor</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.317">TestAssignmentManagerBase.ServerNotYetRunningRsExecutor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSExecutor</a></pre>
 </li>
@@ -190,7 +190,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ServerNotYetRunningRsExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.314">ServerNotYetRunningRsExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.317">ServerNotYetRunningRsExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -207,7 +207,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sendRequest</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.316">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.319">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
                                                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
index ba92e88..6584897 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.336">TestAssignmentManagerBase.SocketTimeoutRsExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.339">TestAssignmentManagerBase.SocketTimeoutRsExecutor</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.GoodRsExecutor</a></pre>
 </li>
 </ul>
@@ -240,7 +240,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>maxSocketTimeoutRetries</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.337">maxSocketTimeoutRetries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.340">maxSocketTimeoutRetries</a></pre>
 </li>
 </ul>
 <a name="maxServerRetries">
@@ -249,7 +249,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>maxServerRetries</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.338">maxServerRetries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.341">maxServerRetries</a></pre>
 </li>
 </ul>
 <a name="lastServer">
@@ -258,7 +258,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>lastServer</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.340">lastServer</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.ServerName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.343">lastServer</a></pre>
 </li>
 </ul>
 <a name="sockTimeoutRetries">
@@ -267,7 +267,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>sockTimeoutRetries</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.341">sockTimeoutRetries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.344">sockTimeoutRetries</a></pre>
 </li>
 </ul>
 <a name="serverRetries">
@@ -276,7 +276,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serverRetries</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.342">serverRetries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.345">serverRetries</a></pre>
 </li>
 </ul>
 </li>
@@ -293,7 +293,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SocketTimeoutRsExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.344">SocketTimeoutRsExecutor</a>(int&nbsp;maxSocketTimeoutRetries,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.347">SocketTimeoutRsExecutor</a>(int&nbsp;maxSocketTimeoutRetries,
                                int&nbsp;maxServerRetries)</pre>
 </li>
 </ul>
@@ -311,7 +311,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sendRequest</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.350">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.353">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
                                                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
index e02cc96..6af1282 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
@@ -341,9 +341,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">sendTransitionReport</a></span>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">sendTransitionReport</a></span>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
                     org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo&nbsp;regionInfo,
-                    org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state)</code>&nbsp;</td>
+                    org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
+                    long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
@@ -726,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.247">createUnassignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri)</pre>
 </li>
 </ul>
-<a name="sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">
+<a name="sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
@@ -734,7 +735,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <h4>sendTransitionReport</h4>
 <pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.262">sendTransitionReport</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
                                     org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo&nbsp;regionInfo,
-                                    org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state)
+                                    org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
+                                    long&nbsp;seqId)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -766,7 +768,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>collectAssignmentManagerMetrics</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.580">collectAssignmentManagerMetrics</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.583">collectAssignmentManagerMetrics</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
index 9a415a0..38312ea 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" target="_top">Frames</a></li>
@@ -361,7 +361,7 @@ extends org.apache.hadoop.hbase.master.HMaster</pre>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
new file mode 100644
index 0000000..241d490
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
@@ -0,0 +1,336 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestReportRegionStateTransitionRetry.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestReportRegionStateTransitionRetry.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestReportRegionStateTransitionRetry.AssignmentManagerForTest" class="title">Class TestReportRegionStateTransitionRetry.AssignmentManagerForTest</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.AssignmentManager</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.AssignmentManagerForTest</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.hbase.master.ServerListener</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.62">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a>
+extends org.apache.hadoop.hbase.master.assignment.AssignmentManager</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager</h3>
+<code>org.apache.hadoop.hbase.master.assignment.AssignmentManager.RegionInTransitionStat</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager</h3>
+<code>ASSIGN_DISPATCH_WAIT_MSEC_CONF_KEY, ASSIGN_DISPATCH_WAITQ_MAX_CONF_KEY, ASSIGN_MAX_ATTEMPTS, BOOTSTRAP_THREAD_POOL_SIZE_CONF_KEY, METRICS_RIT_STUCK_WARNING_THRESHOLD, RIT_CHORE_INTERVAL_MSEC_CONF_KEY</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;req)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager</h3>
+<code>assign, assign, checkIfShouldMoveSystemRegionAsync, compare, computeRegionInTransitionStat, createAssignProcedures, createMergeProcedure, createOneAssignProcedure, createOneUnassignProcedure, createRoundRobinAssignProcedures, createRoundRobinAssignProcedures, createSplitProcedure, createUnassignProceduresForDisabling, deleteTable, getAssignedRegions, getAssignMaxAttempts, getAssignmentManagerMetrics, getConfiguration, getExcludedServersForSystemTable, getFavoredNodes, getMaster, getMetaRegionFromName, getMetaRegionSet, getNumRegionsOpened, getRegionInfo, getRegionsInTransition, getRegionStates, getRegionStateStore, getReopenStatus, getSnapShotOfAssignment, getTableStateManager, hasRegionsInTransition, isCarryingMeta, isMetaAssigned, isMetaLoaded, isMetaRegion, isMetaRegionInTransition, isRunning, isTableDisabled, isTableEnabled, joinCluster, markRegionAsMerged, markRegionAsSplit, move, moveAsync, offlineRegion, onlineRegion, processOfflineRegions, queueAssign, regionClosed, re
 gionClosing, regionFailedOpen, regionOpened, regionOpening, reportOnlineRegions, serverAdded, serverRemoved, setupRIT, start, stop, submitServerCrash, unassign, waitMetaAssigned, waitMetaLoaded, waitServerReportEvent, wakeMetaLoadedEvent, wakeServerReportEvent</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.ServerListener">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.master.ServerListener</h3>
+<code>waiting</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AssignmentManagerForTest</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#line.64">AssignmentManagerForTest</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>reportRegionStateTransition</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#line.69">reportRegionStateTransition</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;req)
+                                                                                                                                           throws org.apache.hadoop.hbase.PleaseHoldException</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>reportRegionStateTransition</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.assignment.AssignmentManager</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>org.apache.hadoop.hbase.PleaseHoldException</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.assignment.AssignmentManager">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html
new file mode 100644
index 0000000..433586b
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html
@@ -0,0 +1,406 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestReportRegionStateTransitionRetry.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestReportRegionStateTransitionRetry.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestReportRegionStateTransitionRetry.HMasterForTest" class="title">Class TestReportRegionStateTransitionRetry.HMasterForTest</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.util.HasThread</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.regionserver.HRegionServer</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.HMaster</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.HMasterForTest</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>, org.apache.hadoop.hbase.Abortable, org.apache.hadoop.hbase.conf.ConfigurationObserver, org.apache.hadoop.hbase.master.MasterServices, org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion, org.apache.hadoop.hbase.regionserver.LastSequenceId, org.apache.hadoop.hbase.regionserver.MutableOnlineRegions, org.apache.hadoop.hbase.regionserver.OnlineRegions, org.apache.hadoop.hbase.regionserver.RegionServerServices, org.apache.hadoop.hbase.Server, org.apache.hadoop.hbase.Stoppable</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.85">TestReportRegionStateTransitionRetry.HMasterForTest</a>
+extends org.apache.hadoop.hbase.master.HMaster</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
+<code>org.apache.hadoop.hbase.master.HMaster.MasterStoppedException, org.apache.hadoop.hbase.master.HMaster.RedirectServlet, org.apache.hadoop.hbase.master.HMaster.TableDescriptorGetter</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer</h3>
+<code>org.apache.hadoop.hbase.regionserver.HRegionServer.MovedRegionsCleaner</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.regionserver.RegionServerServices">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices</h3>
+<code>org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext, org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
+<code>DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS, HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS, MASTER</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer</h3>
+<code>ABORT_TIMEOUT, ABORT_TIMEOUT_TASK, cacheConfig, cacheFlusher, clusterConnection, clusterId, clusterStatusTracker, compactSplitThread, conf, configurationManager, csm, executorService, fs, fsOk, fsUtilizationChore, hMemManager, infoServer, leases, lock, MASTER_HOSTNAME_KEY, metaTableLocator, movedRegions, msgInterval, numRegionsToReport, onlineRegions, regionFavoredNodesMap, REGIONSERVER, regionsInTransitionInRS, replicationSinkHandler, replicationSourceHandler, rpcServices, secureBulkLoadManager, serverName, sleeper, startcode, tableDescriptors, TEST_SKIP_REPORTING_TRANSITION, threadWakeFrequency, useThisHostnameInstead, walFactory, walFs, walRoller, zooKeeper</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.master.assignment.AssignmentManager</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager</a></span>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
+<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createMetaBootstrap, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoadedCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime,
  getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStore, getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isInitialized, isInMai
 ntenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline, waitForNamespaceOnline</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer</h3>
+<code>abort, addRegion, addToMovedRegions, checkFileSystem, cleanMovedRegions, clearRegionBlockCache, closeAllRegions, closeAndOfflineRegionForSplitOrMerge, closeRegion, constructRegionServer, convertThrowableToIOE, createClusterConnection, createConnection, createRegionLoad, createRegionServerStatusStub, createRegionServerStatusStub, execRegionServerService, executeProcedure, getCacheConfig, getChoreService, getClusterConnection, getClusterId, getCompactionPressure, getCompactionRequestor, getCompactSplitThread, getConfiguration, getConfigurationManager, getConnection, getCoordinatedStateManager, getEventLoopGroupConfig, getExecutorService, getFavoredNodesForRegion, getFileSystem, getFlushPressure, getFlushRequester, getFlushThroughputController, getFsTableDescriptors, getHeapMemoryManager, getInfoServer, getLastSequenceId, getLeases, getMasterAddressTracker, getMetaTableLocator, getMetrics, getMostLoadedRegions, getNonceManager, getNumberOfOnlineRegions, getOnlineRegion, getOnline
 RegionsLocalContext, getOnlineTables, getRegion, getRegion, getRegionBlockLocations, getRegionByEncodedName, getRegionByEncodedName, getRegions, getRegions, getRegionServerAccounting, getRegionServerCoprocessorHost, getRegionServerCoprocessors, getRegionServerMetrics, getRegionServerRpcQuotaManager, getRegionServerSpaceQuotaManager, getRegionsInTransitionInRS, getReplicationSinkService, getReplicationSourceService, getRootDir, getRpcServer, getRSRpcServices, getSecureBulkLoadManager, getStartcode, getTableDescriptors, getThreadWakeFrequency, getWAL, getWALFileSystem, getWalGroupsReplicationStatus, getWalRoller, getWALRootDir, getWALs, handleReportForDutyResponse, initializeMemStoreChunkCreator, isAborted, isClusterUp, isOnline, isShutDown, isStopped, isStopping, kill, movedRegionCleanerPeriod, onConfigurationChange, postOpenDeployTasks, regionLock, remoteProcedureComplete, removeRegion, reportFileArchivalForQuotas, reportRegionSizesForQuotas, reportRegionStateTransition, sendShutdow
 nInterrupt, setupClusterConnection, stop, toString, tryRegionServerReport, unassign, updateConfiguration, updateRegionFavoredNodesMapping, waitForServerOnline, walRollRequestFinished</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.util.HasThread">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.HasThread</h3>
+<code>getName, getThread, interrupt, isAlive, isInterrupted, join, join, join, setDaemon, setName, setPriority, setUncaughtExceptionHandler, start</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.MasterServices">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.master.MasterServices</h3>
+<code>getExecutorService, getTableDescriptors, isClusterUp</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Server">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Server</h3>
+<code>createConnection, getChoreService, getClusterConnection, getConfiguration, getConnection, getCoordinatedStateManager, getFileSystem, getMetaTableLocator, isStopping</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Abortable</h3>
+<code>isAborted</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Stoppable</h3>
+<code>isStopped</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="HMasterForTest-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HMasterForTest</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#line.87">HMasterForTest</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                      org.apache.zookeeper.KeeperException</pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code>org.apache.zookeeper.KeeperException</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createAssignmentManager</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#line.92">createAssignmentManager</a>(org.apache.hadoop.hbase.master.MasterServices&nbsp;master)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>createAssignmentManager</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.HMaster</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.HMaster">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[22/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
index 7a6b1af..3b300ad 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
@@ -25,550 +25,621 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import edu.umd.cs.findbugs.annotations.Nullable;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.ServerName;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.TableName;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.RetriesExhaustedException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<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.RegionStateTransitionState;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionStateData;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<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><a name="line.48"></a>
-<span class="sourceLineNo">049</span>/**<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * The procedure to deal with the state transition of a region. A region with a TRSP in place is<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * called RIT, i.e, RegionInTransition.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * &lt;p/&gt;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * It can be used to assign/unassign/reopen/move a region, and for<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * {@link #unassign(MasterProcedureEnv, RegionInfo)} and<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * {@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * specify a targetServer, we will select one randomly.<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * &lt;p/&gt;<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * &lt;p/&gt;<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * The typical state transition for assigning a region is:<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * &lt;pre&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * GET_ASSIGN_CANDIDATE ------&gt; OPEN -----&gt; CONFIRM_OPENED<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * &lt;/pre&gt;<a name="line.66"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import edu.umd.cs.findbugs.annotations.Nullable;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.ServerName;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.TableName;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.RetriesExhaustedException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.exceptions.UnexpectedStateException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.master.RegionState.State;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.master.procedure.AbstractStateMachineRegionProcedure;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionStateData;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * The procedure to deal with the state transition of a region. A region with a TRSP in place is<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * called RIT, i.e, RegionInTransition.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * &lt;p/&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * It can be used to assign/unassign/reopen/move a region, and for<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * {@link #unassign(MasterProcedureEnv, RegionInfo)} and<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * {@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * specify a targetServer, we will select one randomly.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p/&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * &lt;p/&gt;<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * The typical state transition for assigning a region is:<a name="line.66"></a>
 <span class="sourceLineNo">067</span> *<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * try again.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * &lt;p/&gt;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * The typical state transition for unassigning a region is:<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * &lt;pre&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * CLOSE -----&gt; CONFIRM_CLOSED<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * &lt;/pre&gt;<a name="line.75"></a>
+<span class="sourceLineNo">068</span> * &lt;pre&gt;<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * GET_ASSIGN_CANDIDATE ------&gt; OPEN -----&gt; CONFIRM_OPENED<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * &lt;/pre&gt;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * try again.<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * &lt;p/&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * The typical state transition for unassigning a region is:<a name="line.75"></a>
 <span class="sourceLineNo">076</span> *<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * Here things go a bit different, if there are failures, especially that if there is a server<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and<a name="line.78"></a>
-<span class="sourceLineNo">079</span> * then go through the normal way to unassign it.<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * &lt;p/&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * The typical state transition for reopening/moving a region is:<a name="line.81"></a>
-<span class="sourceLineNo">082</span> *<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * &lt;pre&gt;<a name="line.83"></a>
-<span class="sourceLineNo">084</span> * CLOSE -----&gt; CONFIRM_CLOSED -----&gt; GET_ASSIGN_CANDIDATE ------&gt; OPEN -----&gt; CONFIRM_OPENED<a name="line.84"></a>
-<span class="sourceLineNo">085</span> * &lt;/pre&gt;<a name="line.85"></a>
+<span class="sourceLineNo">077</span> * &lt;pre&gt;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * CLOSE -----&gt; CONFIRM_CLOSED<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;/pre&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Here things go a bit different, if there are failures, especially that if there is a server<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * then go through the normal way to unassign it.<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * &lt;p/&gt;<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * The typical state transition for reopening/moving a region is:<a name="line.85"></a>
 <span class="sourceLineNo">086</span> *<a name="line.86"></a>
-<span class="sourceLineNo">087</span> * The retry logic is the same with the above assign/unassign.<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * &lt;p/&gt;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * Notice that, although we allow specify a target server, it just acts as a candidate, we do not<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * guarantee that the region will finally be on the target server. If this is important for you, you<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * should check whether the region is on the target server after the procedure is finished.<a name="line.91"></a>
+<span class="sourceLineNo">087</span> * &lt;pre&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * CLOSE -----&gt; CONFIRM_CLOSED -----&gt; GET_ASSIGN_CANDIDATE ------&gt; OPEN -----&gt; CONFIRM_OPENED<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * &lt;/pre&gt;<a name="line.89"></a>
+<span class="sourceLineNo">090</span> *<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * The retry logic is the same with the above assign/unassign.<a name="line.91"></a>
 <span class="sourceLineNo">092</span> * &lt;p/&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * When you want to schedule a TRSP, please check whether there is still one for this region, and<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * the check should be under the RegionStateNode lock. We will remove the TRSP from a<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * RegionStateNode when we are done, see the code in {@code reportTransition} method below. There<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * could be at most one TRSP for a give region.<a name="line.96"></a>
-<span class="sourceLineNo">097</span> */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>@InterfaceAudience.Private<a name="line.98"></a>
-<span class="sourceLineNo">099</span>public class TransitRegionStateProcedure<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    extends AbstractStateMachineRegionProcedure&lt;RegionStateTransitionState&gt; {<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private RegionStateTransitionState initialState;<a name="line.104"></a>
+<span class="sourceLineNo">093</span> * Notice that, although we allow specify a target server, it just acts as a candidate, we do not<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * guarantee that the region will finally be on the target server. If this is important for you, you<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * should check whether the region is on the target server after the procedure is finished.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * &lt;p/&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * When you want to schedule a TRSP, please check whether there is still one for this region, and<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * the check should be under the RegionStateNode lock. We will remove the TRSP from a<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * RegionStateNode when we are done, see the code in {@code reportTransition} method below. There<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * could be at most one TRSP for a give region.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>@InterfaceAudience.Private<a name="line.102"></a>
+<span class="sourceLineNo">103</span>public class TransitRegionStateProcedure<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    extends AbstractStateMachineRegionProcedure&lt;RegionStateTransitionState&gt; {<a name="line.104"></a>
 <span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  private RegionStateTransitionState lastState;<a name="line.106"></a>
+<span class="sourceLineNo">106</span>  private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  // the candidate where we want to assign the region to.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private ServerName assignCandidate;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private boolean forceNewPlan;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private int attempt;<a name="line.113"></a>
+<span class="sourceLineNo">108</span>  private RegionStateTransitionState initialState;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private RegionStateTransitionState lastState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  // the candidate where we want to assign the region to.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  private ServerName assignCandidate;<a name="line.113"></a>
 <span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public TransitRegionStateProcedure() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @VisibleForTesting<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      ServerName assignCandidate, boolean forceNewPlan, RegionStateTransitionState initialState,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      RegionStateTransitionState lastState) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    super(env, hri);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    this.assignCandidate = assignCandidate;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    this.forceNewPlan = forceNewPlan;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.initialState = initialState;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.lastState = lastState;<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>  @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public TableOperationType getTableOperationType() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // TODO: maybe we should make another type here, REGION_TRANSITION?<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return TableOperationType.REGION_EDIT;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    if (TableName.isMetaTableName(getTableName())) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      return false;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // fail when updating meta so we wait until it is assigned.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    AssignmentManager am = env.getAssignmentManager();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      throws ProcedureSuspendedException {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    // Here the assumption is that, the region must be in CLOSED state, so the region location<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // will be null. And if we fail to open the region and retry here, the forceNewPlan will be<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // true, and also we will set the region location to null.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    boolean retain = false;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    if (!forceNewPlan) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      if (assignCandidate != null) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        retain = assignCandidate.equals(regionNode.getLastHost());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        regionNode.setRegionLocation(assignCandidate);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      } else if (regionNode.getLastHost() != null) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        retain = true;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        regionNode.setRegionLocation(regionNode.getLastHost());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      forceNewPlan, retain);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    env.getAssignmentManager().queueAssign(regionNode);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_OPEN);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      throw new ProcedureSuspendedException();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  private void openRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    ServerName loc = regionNode.getRegionLocation();<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    if (loc == null) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      LOG.warn("No location specified for {}, jump back to state {} to get one", getRegion(),<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      return;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    env.getAssignmentManager().regionOpening(regionNode);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    addChildProcedure(new OpenRegionProcedure(getRegion(), loc));<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  private Flow confirmOpened(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // notice that, for normal case, if we successfully opened a region, we will not arrive here, as<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    // in reportTransition we will call unsetProcedure, and in executeFromState we will return<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    // directly. But if the master is crashed before we finish the procedure, then next time we will<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    // arrive here. So we still need to add code for normal cases.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    if (regionNode.isInState(State.OPEN)) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      attempt = 0;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        // we are the last state, finish<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        regionNode.unsetProcedure(this);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        return Flow.NO_MORE_STATE;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      // It is possible that we arrive here but confirm opened is not the last state, for example,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      // when merging or splitting a region, we unassign the region from a RS and the RS is crashed,<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // then there will be recovered edits for this region, we'd better make the region online<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      // again and then unassign it, otherwise we have to fail the merge/split procedure as we may<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // loss data.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      return Flow.HAS_MORE_STATE;<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>    if (incrementAndCheckMaxAttempts(env, regionNode)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      env.getAssignmentManager().regionFailedOpen(regionNode, true);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      setFailure(getClass().getSimpleName(), new RetriesExhaustedException(<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        "Max attempts " + env.getAssignmentManager().getAssignMaxAttempts() + " exceeded"));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      regionNode.unsetProcedure(this);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return Flow.NO_MORE_STATE;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    env.getAssignmentManager().regionFailedOpen(regionNode, false);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // we failed to assign the region, force a new plan<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    forceNewPlan = true;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    regionNode.setRegionLocation(null);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // Here we do not throw exception because we want to the region to be online ASAP<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    return Flow.HAS_MORE_STATE;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  private void closeRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (regionNode.isInState(State.OPEN, State.CLOSING, State.MERGING, State.SPLITTING)) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      // this is the normal case<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      env.getAssignmentManager().regionClosing(regionNode);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      addChildProcedure(<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        new CloseRegionProcedure(getRegion(), regionNode.getRegionLocation(), assignCandidate));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    } else {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      forceNewPlan = true;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      regionNode.setRegionLocation(null);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private Flow confirmClosed(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // notice that, for normal case, if we successfully opened a region, we will not arrive here, as<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    // in reportTransition we will call unsetProcedure, and in executeFromState we will return<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    // directly. But if the master is crashed before we finish the procedure, then next time we will<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    // arrive here. So we still need to add code for normal cases.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (regionNode.isInState(State.CLOSED)) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      attempt = 0;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        // we are the last state, finish<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        regionNode.unsetProcedure(this);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        return Flow.NO_MORE_STATE;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // This means we need to open the region again, should be a move or reopen<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      return Flow.HAS_MORE_STATE;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    if (regionNode.isInState(State.CLOSING)) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      // This is possible, think the target RS crashes and restarts immediately, the close region<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      // operation will return a NotServingRegionException soon, we can only recover after SCP takes<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      // care of this RS. So here we throw an IOException to let upper layer to retry with backoff.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      throw new HBaseIOException("Failed to close region");<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // abnormally closed, need to reopen it, no matter what is the last state, see the comment in<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // confirmOpened for more details that why we need to reopen the region first even if we just<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    // want to close it.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    // The only exception is for non-default replica, where we do not need to deal with recovered<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    // edits. Notice that the region will remain in ABNORMALLY_CLOSED state, the upper layer need to<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // deal with this state. For non-default replica, this is usually the same with CLOSED.<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    assert regionNode.isInState(State.ABNORMALLY_CLOSED);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    if (!RegionReplicaUtil.isDefaultReplica(getRegion()) &amp;&amp;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      regionNode.unsetProcedure(this);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      return Flow.NO_MORE_STATE;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    attempt = 0;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    return Flow.HAS_MORE_STATE;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>  // Override to lock RegionStateNode<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @SuppressWarnings("rawtypes")<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  @Override<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  protected Procedure[] execute(MasterProcedureEnv env)<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    RegionStateNode regionNode =<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    regionNode.lock();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    try {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      return super.execute(env);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    } finally {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      regionNode.unlock();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private RegionStateNode getRegionStateNode(MasterProcedureEnv env) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.293"></a>
+<span class="sourceLineNo">115</span>  private boolean forceNewPlan;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private int attempt;<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public TransitRegionStateProcedure() {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  @VisibleForTesting<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      ServerName assignCandidate, boolean forceNewPlan, RegionStateTransitionState initialState,<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      RegionStateTransitionState lastState) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    super(env, hri);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.assignCandidate = assignCandidate;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.forceNewPlan = forceNewPlan;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    this.initialState = initialState;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.lastState = lastState;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public TableOperationType getTableOperationType() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // TODO: maybe we should make another type here, REGION_TRANSITION?<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return TableOperationType.REGION_EDIT;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  @Override<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    if (TableName.isMetaTableName(getTableName())) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      return false;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // fail when updating meta so we wait until it is assigned.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    AssignmentManager am = env.getAssignmentManager();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      throws ProcedureSuspendedException {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // Here the assumption is that, the region must be in CLOSED state, so the region location<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // will be null. And if we fail to open the region and retry here, the forceNewPlan will be<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // true, and also we will set the region location to null.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    boolean retain = false;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    if (!forceNewPlan) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      if (assignCandidate != null) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        retain = assignCandidate.equals(regionNode.getLastHost());<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        regionNode.setRegionLocation(assignCandidate);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      } else if (regionNode.getLastHost() != null) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        retain = true;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        regionNode.setRegionLocation(regionNode.getLastHost());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      forceNewPlan, retain);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    env.getAssignmentManager().queueAssign(regionNode);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_OPEN);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      throw new ProcedureSuspendedException();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private void openRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    ServerName loc = regionNode.getRegionLocation();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    if (loc == null) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      LOG.warn("No location specified for {}, jump back to state {} to get one", getRegion(),<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    env.getAssignmentManager().regionOpening(regionNode);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    addChildProcedure(new OpenRegionProcedure(getRegion(), loc));<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED);<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>  private Flow confirmOpened(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      throws IOException {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    // notice that, for normal case, if we successfully opened a region, we will not arrive here, as<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    // in reportTransition we will call unsetProcedure, and in executeFromState we will return<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // directly. But if the master is crashed before we finish the procedure, then next time we will<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // arrive here. So we still need to add code for normal cases.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (regionNode.isInState(State.OPEN)) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      attempt = 0;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        // we are the last state, finish<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        regionNode.unsetProcedure(this);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return Flow.NO_MORE_STATE;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      // It is possible that we arrive here but confirm opened is not the last state, for example,<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // when merging or splitting a region, we unassign the region from a RS and the RS is crashed,<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // then there will be recovered edits for this region, we'd better make the region online<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      // again and then unassign it, otherwise we have to fail the merge/split procedure as we may<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // loss data.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      return Flow.HAS_MORE_STATE;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    if (incrementAndCheckMaxAttempts(env, regionNode)) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      env.getAssignmentManager().regionFailedOpen(regionNode, true);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      setFailure(getClass().getSimpleName(), new RetriesExhaustedException(<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        "Max attempts " + env.getAssignmentManager().getAssignMaxAttempts() + " exceeded"));<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      regionNode.unsetProcedure(this);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      return Flow.NO_MORE_STATE;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    env.getAssignmentManager().regionFailedOpen(regionNode, false);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // we failed to assign the region, force a new plan<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    forceNewPlan = true;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    regionNode.setRegionLocation(null);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // Here we do not throw exception because we want to the region to be online ASAP<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    return Flow.HAS_MORE_STATE;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  private void closeRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (regionNode.isInState(State.OPEN, State.CLOSING, State.MERGING, State.SPLITTING)) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      // this is the normal case<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      env.getAssignmentManager().regionClosing(regionNode);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      addChildProcedure(<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        new CloseRegionProcedure(getRegion(), regionNode.getRegionLocation(), assignCandidate));<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    } else {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      forceNewPlan = true;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      regionNode.setRegionLocation(null);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  private Flow confirmClosed(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      throws IOException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    // notice that, for normal case, if we successfully opened a region, we will not arrive here, as<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // in reportTransition we will call unsetProcedure, and in executeFromState we will return<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // directly. But if the master is crashed before we finish the procedure, then next time we will<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    // arrive here. So we still need to add code for normal cases.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (regionNode.isInState(State.CLOSED)) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      attempt = 0;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        // we are the last state, finish<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        regionNode.unsetProcedure(this);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        return Flow.NO_MORE_STATE;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      // This means we need to open the region again, should be a move or reopen<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      return Flow.HAS_MORE_STATE;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    if (regionNode.isInState(State.CLOSING)) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      // This is possible, think the target RS crashes and restarts immediately, the close region<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      // operation will return a NotServingRegionException soon, we can only recover after SCP takes<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      // care of this RS. So here we throw an IOException to let upper layer to retry with backoff.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      throw new HBaseIOException("Failed to close region");<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // abnormally closed, need to reopen it, no matter what is the last state, see the comment in<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    // confirmOpened for more details that why we need to reopen the region first even if we just<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    // want to close it.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    // The only exception is for non-default replica, where we do not need to deal with recovered<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // edits. Notice that the region will remain in ABNORMALLY_CLOSED state, the upper layer need to<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    // deal with this state. For non-default replica, this is usually the same with CLOSED.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    assert regionNode.isInState(State.ABNORMALLY_CLOSED);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    if (!RegionReplicaUtil.isDefaultReplica(getRegion()) &amp;&amp;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      regionNode.unsetProcedure(this);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      return Flow.NO_MORE_STATE;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    attempt = 0;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    return Flow.HAS_MORE_STATE;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>  // Override to lock RegionStateNode<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  @SuppressWarnings("rawtypes")<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  protected Procedure[] execute(MasterProcedureEnv env)<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    RegionStateNode regionNode =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    regionNode.lock();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    try {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return super.execute(env);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    } finally {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      regionNode.unlock();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  protected Flow executeFromState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    RegionStateNode regionNode = getRegionStateNode(env);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (regionNode.getProcedure() != this) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // This is possible, and is the normal case, as we will call unsetProcedure in<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      // reportTransition, this means we have already done<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      // This is because that, when we mark the region as OPENED or CLOSED, then all the works<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      // should have already been done, and logically we could have another TRSP scheduled for this<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      // region immediately(think of a RS crash at the point...).<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      return Flow.NO_MORE_STATE;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    try {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      switch (state) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        case REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE:<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          queueAssign(env, regionNode);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          return Flow.HAS_MORE_STATE;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        case REGION_STATE_TRANSITION_OPEN:<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          openRegion(env, regionNode);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          return Flow.HAS_MORE_STATE;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          return confirmOpened(env, regionNode);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        case REGION_STATE_TRANSITION_CLOSE:<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          closeRegion(env, regionNode);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          return Flow.HAS_MORE_STATE;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          return confirmClosed(env, regionNode);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        default:<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      }<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    } catch (IOException e) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      long backoff = ProcedureUtil.getBackoffTimeMs(this.attempt++);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      LOG.warn(<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        "Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          "by other Procedure or operator intervention",<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        backoff / 1000, this, regionNode.toShortString(), e);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      setTimeout(Math.toIntExact(backoff));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      skipPersistence();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      throw new ProcedureSuspendedException();<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * At end of timeout, wake ourselves up so we run again.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  @Override<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    env.getProcedureScheduler().addFront(this);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    return false; // 'false' means that this procedure handled the timeout<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private void reportTransitionOpened(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      ServerName serverName, TransitionCode code, long openSeqNum) throws IOException {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    switch (code) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      case OPENED:<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        if (openSeqNum &lt; 0) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          throw new UnexpectedStateException("Received report unexpected " + code +<a name="line.354"></a>
-<span class="sourceLineNo">355</span>            " transition openSeqNum=" + openSeqNum + ", " + regionNode);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        if (openSeqNum &lt;= regionNode.getOpenSeqNum()) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          if (openSeqNum != 0) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>            LOG.warn("Skip update of openSeqNum for {} with {} because the currentSeqNum={}",<a name="line.359"></a>
-<span class="sourceLineNo">360</span>              regionNode, openSeqNum, regionNode.getOpenSeqNum());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        } else {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          regionNode.setOpenSeqNum(openSeqNum);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        env.getAssignmentManager().regionOpened(regionNode);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          // we are done<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          regionNode.unsetProcedure(this);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        break;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      case FAILED_OPEN:<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        // just wake up the procedure and see if we can retry<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        break;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      default:<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        throw new UnexpectedStateException(<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          "Received report unexpected " + code + " transition openSeqNum=" + openSeqNum + ", " +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>            regionNode.toShortString() + ", " + this + ", expected OPENED or FAILED_OPEN.");<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  // we do not need seqId for closing a region<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private void reportTransitionClosed(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      ServerName serverName, TransitionCode code) throws IOException {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    switch (code) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      case CLOSED:<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        env.getAssignmentManager().regionClosed(regionNode, true);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          // we are done<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          regionNode.unsetProcedure(this);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        break;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      default:<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        throw new UnexpectedStateException("Received report unexpected " + code + " transition, " +<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          regionNode.toShortString() + ", " + this + ", expected CLOSED.");<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  // Should be called with RegionStateNode locked<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  public void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      ServerName serverName, TransitionCode code, long seqId) throws IOException {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    switch (getCurrentState()) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        reportTransitionOpened(env, regionNode, serverName, code, seqId);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        break;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        reportTransitionClosed(env, regionNode, serverName, code);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        break;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        LOG.warn("{} received unexpected report transition call from {}, code={}, seqId={}", this,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          serverName, code, seqId);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>  // Should be called with RegionStateNode locked<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      ServerName serverName) throws IOException {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    // Notice that, in this method, we do not change the procedure state, instead, we update the<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    // region state in hbase:meta. This is because that, the procedure state change will not be<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // persisted until the region is woken up and finish one step, if we crash before that then the<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // information will be lost. So here we will update the region state in hbase:meta, and when the<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // procedure is woken up, it will process the error and jump to the correct procedure state.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    RegionStateTransitionState currentState = getCurrentState();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    switch (currentState) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      case REGION_STATE_TRANSITION_CLOSE:<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        // for these 3 states, the region may still be online on the crashed server<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        if (serverName.equals(regionNode.getRegionLocation())) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (currentState != RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        break;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      default:<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        // If the procedure is in other 2 states, then actually we should not arrive here, as we<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        // know that the region is not online on any server, so we need to do nothing... But anyway<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        // let's add a log here<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        LOG.warn("{} received unexpected server crash call for region {} from {}", this, regionNode,<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          serverName);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  }<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>  private boolean incrementAndCheckMaxAttempts(MasterProcedureEnv env, RegionStateNode regionNode) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    int retries = env.getAssignmentManager().getRegionStates().addToFailedOpen(regionNode)<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      .incrementAndGetRetries();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    int max = env.getAssignmentManager().getAssignMaxAttempts();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    LOG.info("Retry={} of max={}; {}; {}", retries, max, this, regionNode.toShortString());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return retries &gt;= max;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  protected void rollbackState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      throws IOException, InterruptedException {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    // no rollback<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    throw new UnsupportedOperationException();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  @Override<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  protected RegionStateTransitionState getState(int stateId) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    return RegionStateTransitionState.forNumber(stateId);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  @Override<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  protected int getStateId(RegionStateTransitionState state) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    return state.getNumber();<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  @Override<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  protected RegionStateTransitionState getInitialState() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    return initialState;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  @Override<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    super.serializeStateData(serializer);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    RegionStateTransitionStateData.Builder builder =<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        RegionStateTransitionStateData.newBuilder().setInitialState(initialState)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>            .setLastState(lastState).setForceNewPlan(forceNewPlan);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    if (assignCandidate != null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      builder.setAssignCandidate(ProtobufUtil.toServerName(assignCandidate));<a name="line.485"></a>
+<span class="sourceLineNo">296</span>  private RegionStateNode getRegionStateNode(MasterProcedureEnv env) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  protected Flow executeFromState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    RegionStateNode regionNode = getRegionStateNode(env);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (regionNode.getProcedure() != this) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // This is possible, and is the normal case, as we will call unsetProcedure in<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      // reportTransition, this means we have already done<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      // This is because that, when we mark the region as OPENED or CLOSED, then all the works<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // should have already been done, and logically we could have another TRSP scheduled for this<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // region immediately(think of a RS crash at the point...).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      return Flow.NO_MORE_STATE;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    try {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      switch (state) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        case REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE:<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          queueAssign(env, regionNode);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          return Flow.HAS_MORE_STATE;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        case REGION_STATE_TRANSITION_OPEN:<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          openRegion(env, regionNode);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          return Flow.HAS_MORE_STATE;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          return confirmOpened(env, regionNode);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        case REGION_STATE_TRANSITION_CLOSE:<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          closeRegion(env, regionNode);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          return Flow.HAS_MORE_STATE;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          return confirmClosed(env, regionNode);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        default:<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    } catch (IOException e) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      long backoff = ProcedureUtil.getBackoffTimeMs(this.attempt++);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      LOG.warn(<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        "Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          "by other Procedure or operator intervention",<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        backoff / 1000, this, regionNode.toShortString(), e);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      setTimeout(Math.toIntExact(backoff));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      skipPersistence();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      throw new ProcedureSuspendedException();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * At end of timeout, wake ourselves up so we run again.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    env.getProcedureScheduler().addFront(this);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return false; // 'false' means that this procedure handled the timeout<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  private boolean isOpening(RegionStateNode regionNode, ServerName serverName,<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      TransitionCode code) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (!regionNode.isInState(State.OPENING)) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      LOG.warn("Received report {} transition from {} for {}, pid={}, but the region is not in" +<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        " OPENING state, should be a retry, ignore", code, serverName, regionNode, getProcId());<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      return false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    if (getCurrentState() != REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      LOG.warn(<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        "Received report {} transition from {} for {}, pid={}," +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>          " but the TRSP is not in {} state, should be a retry, ignore",<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        code, serverName, regionNode, getProcId(), REGION_STATE_TRANSITION_CONFIRM_OPENED);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return true;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private void reportTransitionOpen(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      ServerName serverName, long openSeqNum) throws IOException {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    if (!isOpening(regionNode, serverName, TransitionCode.OPENED)) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    if (openSeqNum &lt; 0) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      throw new UnexpectedStateException("Received report unexpected " + TransitionCode.OPENED +<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        " transition openSeqNum=" + openSeqNum + ", " + regionNode + ", proc=" + this);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="source

<TRUNCATED>

[02/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
new file mode 100644
index 0000000..493b1a1
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.CountDownLatch;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.Future;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.PleaseHoldException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.client.Put;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Table;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.RegionPlan;<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.procedure2.ProcedureExecutor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.zookeeper.KeeperException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.AfterClass;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.junit.BeforeClass;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.junit.ClassRule;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.Test;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.experimental.categories.Category;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.53"></a>
+<span class="sourceLineNo">054</span>public class TestReportRegionStateTransitionRetry {<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @ClassRule<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    HBaseClassTestRule.forClass(TestReportRegionStateTransitionRetry.class);<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static final AtomicReference&lt;CountDownLatch&gt; RESUME_AND_FAIL = new AtomicReference&lt;&gt;();<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final class AssignmentManagerForTest extends AssignmentManager {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    public AssignmentManagerForTest(MasterServices master) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      super(master);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @Override<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    public ReportRegionStateTransitionResponse reportRegionStateTransition(<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        ReportRegionStateTransitionRequest req) throws PleaseHoldException {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      ReportRegionStateTransitionResponse resp = super.reportRegionStateTransition(req);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      CountDownLatch latch = RESUME_AND_FAIL.getAndSet(null);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      if (latch != null) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        try {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>          latch.await();<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        } catch (InterruptedException e) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>          throw new RuntimeException(e);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>        }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        throw new PleaseHoldException("Inject error");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      return resp;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public static final class HMasterForTest extends HMaster {<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      super(conf);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>    @Override<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return new AssignmentManagerForTest(master);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private static TableName NAME = TableName.valueOf("Retry");<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @BeforeClass<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public static void setUp() throws Exception {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    UTIL.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    UTIL.startMiniCluster(1);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    UTIL.createTable(NAME, CF);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    UTIL.waitTableAvailable(NAME);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  @AfterClass<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static void tearDown() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    UTIL.shutdownMiniCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @Test<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void testRetryOnClose() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    RegionInfo region = UTIL.getMiniHBaseCluster().getRegions(NAME).get(0).getRegionInfo();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    AssignmentManager am = UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RegionStateNode rsn = am.getRegionStates().getRegionStateNode(region);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    CountDownLatch latch = new CountDownLatch(1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    RESUME_AND_FAIL.set(latch);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Future&lt;byte[]&gt; future =<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      am.moveAsync(new RegionPlan(region, rsn.getRegionLocation(), rsn.getRegionLocation()));<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    TransitRegionStateProcedure proc =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      procExec.getProcedures().stream().filter(p -&gt; p instanceof TransitRegionStateProcedure)<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p).findAny().get();<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // wait until we schedule the OpenRegionProcedure<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    UTIL.waitFor(10000,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      () -&gt; proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // Fail the reportRegionStateTransition for closing<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    latch.countDown();<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    future.get();<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // confirm that the region can still be write<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    try (Table table = UTIL.getConnection().getTableBuilder(NAME, null).setWriteRpcTimeout(1000)<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      .setOperationTimeout(2000).build()) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      table.put(<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        new Put(Bytes.toBytes("key")).addColumn(CF, Bytes.toBytes("cq"), Bytes.toBytes("val")));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[23/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
index 8efa561..f27a848 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
@@ -61,7 +61,7 @@
 <span class="sourceLineNo">053</span><a name="line.53"></a>
 <span class="sourceLineNo">054</span>  // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  @VisibleForTesting<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBase Counters";<a name="line.56"></a>
+<span class="sourceLineNo">056</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.56"></a>
 <span class="sourceLineNo">057</span>  private ResultScanner scanner = null;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>  private Scan scan = null;<a name="line.58"></a>
 <span class="sourceLineNo">059</span>  private Scan currentScan = null;<a name="line.59"></a>


[04/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[12/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[16/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
index ca790a5..9f82430 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
@@ -72,444 +72,449 @@
 <span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.security.access.SecureTestUtil;<a name="line.64"></a>
 <span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.AfterClass;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.junit.Before;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * This class is only a base for other integration-level backup tests. Do not add tests here.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * TestBackupSmallTests is where tests that don't require bring machines up/down should go All other<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * tests should have their own classes and extend this one<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class TestBackupBase {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupBase.class);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL2;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected static Configuration conf1 = TEST_UTIL.getConfiguration();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected static Configuration conf2;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected static TableName table1 = TableName.valueOf("table1");<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  protected static HTableDescriptor table1Desc;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  protected static TableName table2 = TableName.valueOf("table2");<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  protected static TableName table3 = TableName.valueOf("table3");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected static TableName table4 = TableName.valueOf("table4");<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static TableName table1_restore = TableName.valueOf("default:table1");<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static TableName table2_restore = TableName.valueOf("ns2:table2");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  protected static TableName table3_restore = TableName.valueOf("ns3:table3_restore");<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected static TableName table4_restore = TableName.valueOf("ns4:table4_restore");<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected static final int NB_ROWS_IN_BATCH = 99;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected static final byte[] qualName = Bytes.toBytes("q1");<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected static String BACKUP_ROOT_DIR = Path.SEPARATOR +"backupUT";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected static String BACKUP_REMOTE_ROOT_DIR = Path.SEPARATOR + "backupUT";<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  protected static String provider = "defaultProvider";<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected static boolean secure = false;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  protected static boolean autoRestoreOnFailure = true;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected static boolean setupIsDone = false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected static boolean useSecondCluster = false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  static class IncrementalTableBackupClientForTest extends IncrementalTableBackupClient {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public IncrementalTableBackupClientForTest() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public IncrementalTableBackupClientForTest(Connection conn,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        String backupId, BackupRequest request) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      super(conn, backupId, request);<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>    @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    public void execute() throws IOException {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      // case INCREMENTAL_COPY:<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        // case PREPARE_INCREMENTAL:<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        failStageIf(Stage.stage_0);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        beginBackup(backupManager, backupInfo);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>        failStageIf(Stage.stage_1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        backupInfo.setPhase(BackupPhase.PREPARE_INCREMENTAL);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        LOG.debug("For incremental backup, current table set is "<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            + backupManager.getIncrementalBackupTableSet());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        newTimestamps = ((IncrementalBackupManager) backupManager).getIncrBackupLogFileMap();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        // copy out the table and region info files for each table<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        BackupUtils.copyTableRegionInfo(conn, backupInfo, conf);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        // convert WAL to HFiles and copy them to .tmp under BACKUP_ROOT<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        convertWALsToHFiles();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        incrementalCopyHFiles(new String[] {getBulkOutputDir().toString()},<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          backupInfo.getBackupRootDir());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        failStageIf(Stage.stage_2);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        // Save list of WAL files copied<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        backupManager.recordWALFiles(backupInfo.getIncrBackupFileList());<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>        // case INCR_BACKUP_COMPLETE:<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // Set the previousTimestampMap which is before this current log roll to the manifest.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; previousTimestampMap =<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            backupManager.readLogTimestampMap();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        backupInfo.setIncrTimestampMap(previousTimestampMap);<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        failStageIf(Stage.stage_3);<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            backupManager.readLogTimestampMap();<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>        Long newStartCode =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            BackupUtils.getMinValue(BackupUtils.getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>        handleBulkLoad(backupInfo.getTableNames());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        failStageIf(Stage.stage_4);<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>        // backup complete<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        completeBackup(conn, backupInfo, backupManager, BackupType.INCREMENTAL, conf);<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      } catch (Exception e) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        failBackup(conn, backupInfo, backupManager, e, "Unexpected Exception : ",<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          BackupType.INCREMENTAL, conf);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        throw new IOException(e);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  static class FullTableBackupClientForTest extends FullTableBackupClient {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public FullTableBackupClientForTest() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    public FullTableBackupClientForTest(Connection conn, String backupId, BackupRequest request)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throws IOException {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      super(conn, backupId, request);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    public void execute() throws IOException {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      // Get the stage ID to fail on<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      try (Admin admin = conn.getAdmin()) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        // Begin BACKUP<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        beginBackup(backupManager, backupInfo);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        failStageIf(Stage.stage_0);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        String savedStartCode;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        boolean firstBackup;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        // do snapshot for full table backup<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        savedStartCode = backupManager.readBackupStartCode();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        firstBackup = savedStartCode == null || Long.parseLong(savedStartCode) == 0L;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        if (firstBackup) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          // This is our first backup. Let's put some marker to system table so that we can hold the<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          // logs while we do the backup.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          backupManager.writeBackupStartCode(0L);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        failStageIf(Stage.stage_1);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        // We roll log here before we do the snapshot. It is possible there is duplicate data<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        // in the log that is already in the snapshot. But if we do it after the snapshot, we<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        // could have data loss.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        // A better approach is to do the roll log on each RS in the same global procedure as<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        // the snapshot.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        LOG.info("Execute roll log procedure for full backup ...");<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>        Map&lt;String, String&gt; props = new HashMap&lt;&gt;();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        props.put("backupRoot", backupInfo.getBackupRootDir());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        admin.execProcedure(LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_SIGNATURE,<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_NAME, props);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        failStageIf(Stage.stage_2);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        newTimestamps = backupManager.readRegionServerLastLogRollResult();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (firstBackup) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          // Updates registered log files<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          // We record ALL old WAL files as registered, because<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          // this is a first full backup in the system and these<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          // files are not needed for next incremental backup<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          List&lt;String&gt; logFiles = BackupUtils.getWALFilesOlderThan(conf, newTimestamps);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          backupManager.recordWALFiles(logFiles);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // SNAPSHOT_TABLES:<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        backupInfo.setPhase(BackupPhase.SNAPSHOT);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        for (TableName tableName : tableList) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          String snapshotName =<a name="line.229"></a>
-<span class="sourceLineNo">230</span>              "snapshot_" + Long.toString(EnvironmentEdgeManager.currentTime()) + "_"<a name="line.230"></a>
-<span class="sourceLineNo">231</span>                  + tableName.getNamespaceAsString() + "_" + tableName.getQualifierAsString();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>          snapshotTable(admin, tableName, snapshotName);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          backupInfo.setSnapshotName(tableName, snapshotName);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        failStageIf(Stage.stage_3);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // SNAPSHOT_COPY:<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        // do snapshot copy<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        LOG.debug("snapshot copy for " + backupId);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        snapshotCopy(backupInfo);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Updates incremental backup table set<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        backupManager.addIncrementalBackupTableSet(backupInfo.getTables());<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>        // BACKUP_COMPLETE:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        backupInfo.setState(BackupState.COMPLETE);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            backupManager.readLogTimestampMap();<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>        Long newStartCode =<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            BackupUtils.getMinValue(BackupUtils<a name="line.256"></a>
-<span class="sourceLineNo">257</span>                .getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        failStageIf(Stage.stage_4);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        // backup complete<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        completeBackup(conn, backupInfo, backupManager, BackupType.FULL, conf);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>      } catch (Exception e) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>        if(autoRestoreOnFailure) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          failBackup(conn, backupInfo, backupManager, e, "Unexpected BackupException : ",<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            BackupType.FULL, conf);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        throw new IOException(e);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<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>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @throws Exception if starting the mini cluster or setting up the tables fails<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  @Before<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public void setUp() throws Exception {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (setupIsDone) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    if (secure) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // set the always on security provider<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      UserProvider.setUserProviderForTesting(TEST_UTIL.getConfiguration(),<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          HadoopSecurityEnabledUserProviderForTesting.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      // setup configuration<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      SecureTestUtil.enableSecurity(TEST_UTIL.getConfiguration());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    conf1.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    BackupManager.decorateMasterConfiguration(conf1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    BackupManager.decorateRegionServerConfiguration(conf1);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    // Set TTL for old WALs to 1 sec to enforce fast cleaning of an archived<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    // WAL files<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    conf1.setLong(TimeToLiveLogCleaner.TTL_CONF_KEY, 1000);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    conf1.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, 1000);<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // Set MultiWAL (with 2 default WAL files per RS)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    conf1.set(WALFactory.WAL_PROVIDER, provider);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    TEST_UTIL.startMiniCluster();<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (useSecondCluster) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      conf2 = HBaseConfiguration.create(conf1);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      TEST_UTIL2 = new HBaseTestingUtility(conf2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      TEST_UTIL2.setZkCluster(TEST_UTIL.getZkCluster());<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      TEST_UTIL2.startMiniCluster();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    conf1 = TEST_UTIL.getConfiguration();<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    TEST_UTIL.startMiniMapReduceCluster();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    BACKUP_ROOT_DIR =<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        new Path(new Path(TEST_UTIL.getConfiguration().get("fs.defaultFS")),<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          BACKUP_ROOT_DIR).toString();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    LOG.info("ROOTDIR " + BACKUP_ROOT_DIR);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    if (useSecondCluster) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      BACKUP_REMOTE_ROOT_DIR =<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          new Path(new Path(TEST_UTIL2.getConfiguration().get("fs.defaultFS"))<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          + BACKUP_REMOTE_ROOT_DIR).toString();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      LOG.info("REMOTE ROOTDIR " + BACKUP_REMOTE_ROOT_DIR);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    createTables();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    populateFromMasterConfig(TEST_UTIL.getHBaseCluster().getMaster().getConfiguration(), conf1);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    setupIsDone = true;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  private static void populateFromMasterConfig(Configuration masterConf, Configuration conf) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    Iterator&lt;Entry&lt;String, String&gt;&gt; it = masterConf.iterator();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    while (it.hasNext()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      Entry&lt;String, String&gt; e = it.next();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      conf.set(e.getKey(), e.getValue());<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @throws Exception if deleting the archive directory or shutting down the mini cluster fails<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @AfterClass<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public static void tearDown() throws Exception {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    try{<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      SnapshotTestingUtils.deleteAllSnapshots(TEST_UTIL.getHBaseAdmin());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    } catch (Exception e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SnapshotTestingUtils.deleteArchiveDirectory(TEST_UTIL);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    if (useSecondCluster) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      TEST_UTIL2.shutdownMiniCluster();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    TEST_UTIL.shutdownMiniMapReduceCluster();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  HTable insertIntoTable(Connection conn, TableName table, byte[] family, int id, int numRows)<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    HTable t = (HTable) conn.getTable(table);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    Put p1;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    for (int i = 0; i &lt; numRows; i++) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      p1 = new Put(Bytes.toBytes("row-" + table + "-" + id + "-" + i));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      p1.addColumn(family, qualName, Bytes.toBytes("val" + i));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      t.put(p1);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    return t;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  protected BackupRequest createBackupRequest(BackupType type,<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      List&lt;TableName&gt; tables, String path) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    BackupRequest request = builder.withBackupType(type)<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                                    .withTableList(tables)<a name="line.368"></a>
-<span class="sourceLineNo">369</span>                                    .withTargetRootDir(path).build();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return request;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  protected String backupTables(BackupType type, List&lt;TableName&gt; tables, String path)<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Connection conn = null;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    BackupAdmin badmin = null;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    String backupId;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    try {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      conn = ConnectionFactory.createConnection(conf1);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      badmin = new BackupAdminImpl(conn);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      BackupRequest request = createBackupRequest(type, tables, path);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      backupId = badmin.backupTables(request);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    } finally {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (badmin != null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        badmin.close();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      if (conn != null) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        conn.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    return backupId;<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>  protected String fullTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return backupTables(BackupType.FULL, tables, BACKUP_ROOT_DIR);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  protected String incrementalTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return backupTables(BackupType.INCREMENTAL, tables, BACKUP_ROOT_DIR);<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>
-<span class="sourceLineNo">402</span>  protected static void loadTable(Table table) throws Exception {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Put p; // 100 + 1 row to t1_syncup<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    for (int i = 0; i &lt; NB_ROWS_IN_BATCH; i++) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      p = new Put(Bytes.toBytes("row" + i));<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      p.setDurability(Durability.SKIP_WAL);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      p.addColumn(famName, qualName, Bytes.toBytes("val" + i));<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      table.put(p);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  protected static void createTables() throws Exception {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    long tid = System.currentTimeMillis();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    table1 = TableName.valueOf("test-" + tid);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    HBaseAdmin ha = TEST_UTIL.getHBaseAdmin();<a name="line.415"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.AfterClass;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Before;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.Logger;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.slf4j.LoggerFactory;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * This class is only a base for other integration-level backup tests. Do not add tests here.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * TestBackupSmallTests is where tests that don't require bring machines up/down should go All other<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * tests should have their own classes and extend this one<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>public class TestBackupBase {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupBase.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected static HBaseTestingUtility TEST_UTIL2;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected static Configuration conf1 = TEST_UTIL.getConfiguration();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected static Configuration conf2;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected static TableName table1 = TableName.valueOf("table1");<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected static HTableDescriptor table1Desc;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected static TableName table2 = TableName.valueOf("table2");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected static TableName table3 = TableName.valueOf("table3");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected static TableName table4 = TableName.valueOf("table4");<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected static TableName table1_restore = TableName.valueOf("default:table1");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static TableName table2_restore = TableName.valueOf("ns2:table2");<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static TableName table3_restore = TableName.valueOf("ns3:table3_restore");<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static TableName table4_restore = TableName.valueOf("ns4:table4_restore");<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected static final int NB_ROWS_IN_BATCH = 99;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected static final byte[] qualName = Bytes.toBytes("q1");<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected static String BACKUP_ROOT_DIR = Path.SEPARATOR +"backupUT";<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  protected static String BACKUP_REMOTE_ROOT_DIR = Path.SEPARATOR + "backupUT";<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  protected static String provider = "defaultProvider";<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected static boolean secure = false;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  protected static boolean autoRestoreOnFailure = true;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected static boolean setupIsDone = false;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  protected static boolean useSecondCluster = false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  static class IncrementalTableBackupClientForTest extends IncrementalTableBackupClient {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public IncrementalTableBackupClientForTest() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    public IncrementalTableBackupClientForTest(Connection conn,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        String backupId, BackupRequest request) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      super(conn, backupId, request);<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 execute() throws IOException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      // case INCREMENTAL_COPY:<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        // case PREPARE_INCREMENTAL:<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        failStageIf(Stage.stage_0);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        beginBackup(backupManager, backupInfo);<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>        failStageIf(Stage.stage_1);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        backupInfo.setPhase(BackupPhase.PREPARE_INCREMENTAL);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        LOG.debug("For incremental backup, current table set is "<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            + backupManager.getIncrementalBackupTableSet());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        newTimestamps = ((IncrementalBackupManager) backupManager).getIncrBackupLogFileMap();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        // copy out the table and region info files for each table<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        BackupUtils.copyTableRegionInfo(conn, backupInfo, conf);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        // convert WAL to HFiles and copy them to .tmp under BACKUP_ROOT<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        convertWALsToHFiles();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        incrementalCopyHFiles(new String[] {getBulkOutputDir().toString()},<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          backupInfo.getBackupRootDir());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        failStageIf(Stage.stage_2);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // Save list of WAL files copied<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        backupManager.recordWALFiles(backupInfo.getIncrBackupFileList());<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>        // case INCR_BACKUP_COMPLETE:<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // Set the previousTimestampMap which is before this current log roll to the manifest.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; previousTimestampMap =<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            backupManager.readLogTimestampMap();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        backupInfo.setIncrTimestampMap(previousTimestampMap);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        failStageIf(Stage.stage_3);<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            backupManager.readLogTimestampMap();<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>        Long newStartCode =<a name="line.160"></a>
+<span class="sourceLineNo">161</span>            BackupUtils.getMinValue(BackupUtils.getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>        handleBulkLoad(backupInfo.getTableNames());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        failStageIf(Stage.stage_4);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>        // backup complete<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        completeBackup(conn, backupInfo, backupManager, BackupType.INCREMENTAL, conf);<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>      } catch (Exception e) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        failBackup(conn, backupInfo, backupManager, e, "Unexpected Exception : ",<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          BackupType.INCREMENTAL, conf);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        throw new IOException(e);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  static class FullTableBackupClientForTest extends FullTableBackupClient {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public FullTableBackupClientForTest() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    public FullTableBackupClientForTest(Connection conn, String backupId, BackupRequest request)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      super(conn, backupId, request);<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>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public void execute() throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Get the stage ID to fail on<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      try (Admin admin = conn.getAdmin()) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        // Begin BACKUP<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        beginBackup(backupManager, backupInfo);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        failStageIf(Stage.stage_0);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        String savedStartCode;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        boolean firstBackup;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        // do snapshot for full table backup<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        savedStartCode = backupManager.readBackupStartCode();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        firstBackup = savedStartCode == null || Long.parseLong(savedStartCode) == 0L;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        if (firstBackup) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          // This is our first backup. Let's put some marker to system table so that we can hold the<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          // logs while we do the backup.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          backupManager.writeBackupStartCode(0L);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        failStageIf(Stage.stage_1);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        // We roll log here before we do the snapshot. It is possible there is duplicate data<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        // in the log that is already in the snapshot. But if we do it after the snapshot, we<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        // could have data loss.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        // A better approach is to do the roll log on each RS in the same global procedure as<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // the snapshot.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("Execute roll log procedure for full backup ...");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        Map&lt;String, String&gt; props = new HashMap&lt;&gt;();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        props.put("backupRoot", backupInfo.getBackupRootDir());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        admin.execProcedure(LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_SIGNATURE,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_NAME, props);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        failStageIf(Stage.stage_2);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        newTimestamps = backupManager.readRegionServerLastLogRollResult();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (firstBackup) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          // Updates registered log files<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          // We record ALL old WAL files as registered, because<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          // this is a first full backup in the system and these<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          // files are not needed for next incremental backup<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          List&lt;String&gt; logFiles = BackupUtils.getWALFilesOlderThan(conf, newTimestamps);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          backupManager.recordWALFiles(logFiles);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // SNAPSHOT_TABLES:<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        backupInfo.setPhase(BackupPhase.SNAPSHOT);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        for (TableName tableName : tableList) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          String snapshotName =<a name="line.230"></a>
+<span class="sourceLineNo">231</span>              "snapshot_" + Long.toString(EnvironmentEdgeManager.currentTime()) + "_"<a name="line.231"></a>
+<span class="sourceLineNo">232</span>                  + tableName.getNamespaceAsString() + "_" + tableName.getQualifierAsString();<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>          snapshotTable(admin, tableName, snapshotName);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          backupInfo.setSnapshotName(tableName, snapshotName);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        failStageIf(Stage.stage_3);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        // SNAPSHOT_COPY:<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        // do snapshot copy<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        LOG.debug("snapshot copy for " + backupId);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        snapshotCopy(backupInfo);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        // Updates incremental backup table set<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        backupManager.addIncrementalBackupTableSet(backupInfo.getTables());<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>        // BACKUP_COMPLETE:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        backupInfo.setState(BackupState.COMPLETE);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            backupManager.readLogTimestampMap();<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>        Long newStartCode =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>            BackupUtils.getMinValue(BackupUtils<a name="line.257"></a>
+<span class="sourceLineNo">258</span>                .getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        failStageIf(Stage.stage_4);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        // backup complete<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        completeBackup(conn, backupInfo, backupManager, BackupType.FULL, conf);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } catch (Exception e) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>        if(autoRestoreOnFailure) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          failBackup(conn, backupInfo, backupManager, e, "Unexpected BackupException : ",<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            BackupType.FULL, conf);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        throw new IOException(e);<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>
+<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  /**<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @throws Exception if starting the mini cluster or setting up the tables fails<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Before<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void setUp() throws Exception {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    if (setupIsDone) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (secure) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      // set the always on security provider<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      UserProvider.setUserProviderForTesting(TEST_UTIL.getConfiguration(),<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          HadoopSecurityEnabledUserProviderForTesting.class);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // setup configuration<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      SecureTestUtil.enableSecurity(TEST_UTIL.getConfiguration());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    conf1.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    BackupManager.decorateMasterConfiguration(conf1);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    BackupManager.decorateRegionServerConfiguration(conf1);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    // Set TTL for old WALs to 1 sec to enforce fast cleaning of an archived<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    // WAL files<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    conf1.setLong(TimeToLiveLogCleaner.TTL_CONF_KEY, 1000);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    conf1.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, 1000);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // Set MultiWAL (with 2 default WAL files per RS)<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    conf1.set(WALFactory.WAL_PROVIDER, provider);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    TEST_UTIL.startMiniCluster();<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    if (useSecondCluster) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      conf2 = HBaseConfiguration.create(conf1);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      TEST_UTIL2 = new HBaseTestingUtility(conf2);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      TEST_UTIL2.setZkCluster(TEST_UTIL.getZkCluster());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      TEST_UTIL2.startMiniDFSCluster(3);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      String root2 = TEST_UTIL2.getConfiguration().get("fs.defaultFS");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      Path p = new Path(new Path(root2), "/tmp/wal");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      CommonFSUtils.setWALRootDir(TEST_UTIL2.getConfiguration(), p);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      TEST_UTIL2.startMiniCluster();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    conf1 = TEST_UTIL.getConfiguration();<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>    TEST_UTIL.startMiniMapReduceCluster();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    BACKUP_ROOT_DIR =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        new Path(new Path(TEST_UTIL.getConfiguration().get("fs.defaultFS")),<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          BACKUP_ROOT_DIR).toString();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    LOG.info("ROOTDIR " + BACKUP_ROOT_DIR);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    if (useSecondCluster) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      BACKUP_REMOTE_ROOT_DIR =<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          new Path(new Path(TEST_UTIL2.getConfiguration().get("fs.defaultFS"))<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          + BACKUP_REMOTE_ROOT_DIR).toString();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      LOG.info("REMOTE ROOTDIR " + BACKUP_REMOTE_ROOT_DIR);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    createTables();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    populateFromMasterConfig(TEST_UTIL.getHBaseCluster().getMaster().getConfiguration(), conf1);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    setupIsDone = true;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private static void populateFromMasterConfig(Configuration masterConf, Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Iterator&lt;Entry&lt;String, String&gt;&gt; it = masterConf.iterator();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    while (it.hasNext()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      Entry&lt;String, String&gt; e = it.next();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      conf.set(e.getKey(), e.getValue());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @throws Exception if deleting the archive directory or shutting down the mini cluster fails<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @AfterClass<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public static void tearDown() throws Exception {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    try{<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      SnapshotTestingUtils.deleteAllSnapshots(TEST_UTIL.getHBaseAdmin());<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    } catch (Exception e) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    SnapshotTestingUtils.deleteArchiveDirectory(TEST_UTIL);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (useSecondCluster) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      TEST_UTIL2.shutdownMiniCluster();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    TEST_UTIL.shutdownMiniMapReduceCluster();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  HTable insertIntoTable(Connection conn, TableName table, byte[] family, int id, int numRows)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      throws IOException {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    HTable t = (HTable) conn.getTable(table);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Put p1;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (int i = 0; i &lt; numRows; i++) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      p1 = new Put(Bytes.toBytes("row-" + table + "-" + id + "-" + i));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      p1.addColumn(family, qualName, Bytes.toBytes("val" + i));<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      t.put(p1);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return t;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  protected BackupRequest createBackupRequest(BackupType type,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      List&lt;TableName&gt; tables, String path) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    BackupRequest request = builder.withBackupType(type)<a name="line.372"></a>
+<span class="sourceLineNo">373</span>                                    .withTableList(tables)<a name="line.373"></a>
+<span class="sourceLineNo">374</span>                                    .withTargetRootDir(path).build();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return request;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  protected String backupTables(BackupType type, List&lt;TableName&gt; tables, String path)<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    Connection conn = null;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    BackupAdmin badmin = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String backupId;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    try {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      conn = ConnectionFactory.createConnection(conf1);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      badmin = new BackupAdminImpl(conn);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      BackupRequest request = createBackupRequest(type, tables, path);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      backupId = badmin.backupTables(request);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    } finally {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      if (badmin != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        badmin.close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      if (conn != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        conn.close();<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>    return backupId;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected String fullTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return backupTables(BackupType.FULL, tables, BACKUP_ROOT_DIR);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  protected String incrementalTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    return backupTables(BackupType.INCREMENTAL, tables, BACKUP_ROOT_DIR);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  protected static void loadTable(Table table) throws Exception {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Put p; // 100 + 1 row to t1_syncup<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    for (int i = 0; i &lt; NB_ROWS_IN_BATCH; i++) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      p = new Put(Bytes.toBytes("row" + i));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      p.setDurability(Durability.SKIP_WAL);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      p.addColumn(famName, qualName, Bytes.toBytes("val" + i));<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      table.put(p);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
 <span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // Create namespaces<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    NamespaceDescriptor desc1 = NamespaceDescriptor.create("ns1").build();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    NamespaceDescriptor desc2 = NamespaceDescriptor.create("ns2").build();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    NamespaceDescriptor desc3 = NamespaceDescriptor.create("ns3").build();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    NamespaceDescriptor desc4 = NamespaceDescriptor.create("ns4").build();<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    ha.createNamespace(desc1);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    ha.createNamespace(desc2);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    ha.createNamespace(desc3);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ha.createNamespace(desc4);<a name="line.426"></a>
+<span class="sourceLineNo">417</span>  protected static void createTables() throws Exception {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    long tid = System.currentTimeMillis();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    table1 = TableName.valueOf("test-" + tid);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HBaseAdmin ha = TEST_UTIL.getHBaseAdmin();<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>    // Create namespaces<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    NamespaceDescriptor desc1 = NamespaceDescriptor.create("ns1").build();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    NamespaceDescriptor desc2 = NamespaceDescriptor.create("ns2").build();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    NamespaceDescriptor desc3 = NamespaceDescriptor.create("ns3").build();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    NamespaceDescriptor desc4 = NamespaceDescriptor.create("ns4").build();<a name="line.426"></a>
 <span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    HTableDescriptor desc = new HTableDescriptor(table1);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    desc.addFamily(fam);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    ha.createTable(desc);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    table1Desc = desc;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Connection conn = ConnectionFactory.createConnection(conf1);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Table table = conn.getTable(table1);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    loadTable(table);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    table.close();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    table2 = TableName.valueOf("ns2:test-" + tid + 1);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    desc = new HTableDescriptor(table2);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    desc.addFamily(fam);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ha.createTable(desc);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    table = conn.getTable(table2);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    loadTable(table);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    table.close();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    table3 = TableName.valueOf("ns3:test-" + tid + 2);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    table = TEST_UTIL.createTable(table3, famName);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    table.close();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    table4 = TableName.valueOf("ns4:test-" + tid + 3);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    table = TEST_UTIL.createTable(table4, famName);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    table.close();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    ha.close();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    conn.close();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  protected boolean checkSucceeded(String backupId) throws IOException {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (status == null) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      return false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    return status.getState() == BackupState.COMPLETE;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  protected boolean checkFailed(String backupId) throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    if (status == null) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    return status.getState() == BackupState.FAILED;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>  private BackupInfo getBackupInfo(String backupId) throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    try (BackupSystemTable table = new BackupSystemTable(TEST_UTIL.getConnection())) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      BackupInfo status = table.readBackupInfo(backupId);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return status;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  protected BackupAdmin getBackupAdmin() throws IOException {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    return new BackupAdminImpl(TEST_UTIL.getConnection());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Helper method<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  protected List&lt;TableName&gt; toList(String... args) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    List&lt;TableName&gt; ret = new ArrayList&lt;&gt;();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      ret.add(TableName.valueOf(args[i]));<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    return ret;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  protected void dumpBackupDir() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    // Dump Backup Dir<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    FileSystem fs = FileSystem.get(conf1);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(new Path(BACKUP_ROOT_DIR), true);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    while (it.hasNext()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      LOG.debug(Objects.toString(it.next().getPath()));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>}<a name="line.504"></a>
+<span class="sourceLineNo">428</span>    ha.createNamespace(desc1);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    ha.createNamespace(desc2);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    ha.createNamespace(desc3);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    ha.createNamespace(desc4);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HTableDescriptor desc = new HTableDescriptor(table1);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    desc.addFamily(fam);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    ha.createTable(desc);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    table1Desc = desc;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    Connection conn = ConnectionFactory.createConnection(conf1);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    Table table = conn.getTable(table1);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    loadTable(table);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    table.close();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    table2 = TableName.valueOf("ns2:test-" + tid + 1);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    desc = new HTableDescriptor(table2);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    desc.addFamily(fam);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    ha.createTable(desc);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    table = conn.getTable(table2);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    loadTable(table);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    table.close();<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    table3 = TableName.valueOf("ns3:test-" + tid + 2);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    table = TEST_UTIL.createTable(table3, famName);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    table.close();<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    table4 = TableName.valueOf("ns4:test-" + tid + 3);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    table = TEST_UTIL.createTable(table4, famName);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    table.close();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    ha.close();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    conn.close();<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  protected boolean checkSucceeded(String backupId) throws IOException {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    if (status == null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      return false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return status.getState() == BackupState.COMPLETE;<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  protected boolean checkFailed(String backupId) throws IOException {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (status == null) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return status.getState() == BackupState.FAILED;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private BackupInfo getBackupInfo(String backupId) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    try (BackupSystemTable table = new BackupSystemTable(TEST_UTIL.getConnection())) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      BackupInfo status = table.readBackupInfo(backupId);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      return status;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
+<span class="sourceLineNo">485</span><a name="line.485"></a>
+<span class="sourceLineNo">486</span>  protected BackupAdmin getBackupAdmin() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    return new BackupAdminImpl(TEST_UTIL.getConnection());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * Helper method<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   */<a name="line.492"></a>
+<span class="sourceLineNo">493</span>  protected List&lt;TableName&gt; toList(String... args) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    List&lt;TableName&gt; ret = new ArrayList&lt;&gt;();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      ret.add(TableName.valueOf(args[i]));<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    return ret;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>  protected void dumpBackupDir() throws IOException {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    // Dump Backup Dir<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    FileSystem fs = FileSystem.get(conf1);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(new Path(BACKUP_ROOT_DIR), true);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    while (it.hasNext()) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.debug(Objects.toString(it.next().getPath()));<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span>}<a name="line.509"></a>
 
 
 


[25/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 71fce73..2dc9444 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -540,13 +540,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index c6caa9b..bcb1724 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -191,8 +191,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 276760a..0937325 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
 <span class="sourceLineNo">011</span>  public static final String revision = "";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Tue Nov 13 14:43:38 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Wed Nov 14 14:43:46 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "55a6c0a68f033730bffcb68c308d426e";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "c47ab65d5523b7b5e171647165abbf68";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[26/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStateNode.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStateNode.html
index a3e6f22..c6e0916 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStateNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/class-use/RegionStateNode.html
@@ -317,49 +317,55 @@
                             <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#isOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">isOpening</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+         <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+         org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#openRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">openRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
           <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#preTransitCheck-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.master.RegionState.State:A-">preTransitCheck</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                <a href="../../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>[]&nbsp;expectedStates)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#queueAssign-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">queueAssign</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
            <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#queueAssign-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">queueAssign</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block">Add the assign operation to the assignment queue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionClosed-org.apache.hadoop.hbase.master.assignment.RegionStateNode-boolean-">regionClosed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
             boolean&nbsp;normally)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionClosing-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">regionClosing</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionFailedOpen-org.apache.hadoop.hbase.master.assignment.RegionStateNode-boolean-">regionFailedOpen</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                 boolean&nbsp;giveUp)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionOpened-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">regionOpened</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#regionOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">regionOpening</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-java.io.IOException-">remoteCallFailed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -367,7 +373,7 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-java.io.IOException-">remoteCallFailed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -375,7 +381,7 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected abstract boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-java.io.IOException-">remoteCallFailed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -383,16 +389,16 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ServerStateNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html#removeRegion-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">removeRegion</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionStates.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#removeRegionFromServer-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">removeRegionFromServer</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                       <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -401,7 +407,7 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -410,7 +416,7 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -419,7 +425,7 @@
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -427,27 +433,31 @@
                 org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
                 long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportTransition-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.master.assignment.ServerStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;state,
                 long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">reportTransitionClosed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionClosed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                       <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
+                      <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionFailedOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionFailedOpen</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                          <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                          <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpened-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransitionOpened</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
-                      long&nbsp;openSeqNum)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-long-">reportTransitionOpen</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                    <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+                    long&nbsp;openSeqNum)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index a26a606..fbc9ab9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -349,8 +349,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
index d357c0f..852c03a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
@@ -758,46 +758,50 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">reportTransitionClosed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionClosed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                       <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
+                      <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpened-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransitionOpened</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
-                      long&nbsp;openSeqNum)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionFailedOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionFailedOpen</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                          <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                          <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-long-">reportTransitionOpen</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                    <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+                    long&nbsp;openSeqNum)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionRemoteProcedureBase.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollback</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#rollback-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollback</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#rollbackCloseRegionsForMerge-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">rollbackCloseRegionsForMerge</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Rollback close regions</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">GCMergedRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/GCMergedRegionsProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCMergedRegionsState-">rollbackState</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCMergedRegionsState&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">GCRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/GCRegionProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCRegionState-">rollbackState</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.GCRegionState&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MergeTableRegionsState-">rollbackState</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MergeTableRegionsState&nbsp;state)</code>
@@ -806,19 +810,19 @@
  AssignProcedures) .</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">MoveRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MoveRegionProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState-">rollbackState</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.MoveRegionState&nbsp;state)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-">rollbackState</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState-">rollbackState</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState&nbsp;state)</code>
@@ -827,104 +831,104 @@
  AssignProcedure) .</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#serverCrashed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">serverCrashed</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
              <a href="../../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#setOwner-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure-">setOwner</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
         <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#setRegionStateToMerging-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setRegionStateToMerging</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Set the region states to MERGING state</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">At end of timeout, wake ourselves up so we run again.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#splitStoreFiles-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.regionserver.HRegionFileSystem-">splitStoreFiles</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;regionFs)</code>
 <div class="block">Create Split directory</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#startTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">startTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html#startTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">startTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected abstract boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#startTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">startTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#unassign-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-">unassign</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
         <a href="../../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#updateMeta-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateMeta</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Add daughter regions to META</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#updateMetaForMergedRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateMetaForMergedRegions</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Add merged region to META and delete original regions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">UnassignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/UnassignProcedure.html#updateTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">updateTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/AssignProcedure.html#updateTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">updateTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected abstract boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionTransitionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#updateTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">updateTransition</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">SplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html#writeMaxSequenceIdFile-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">writeMaxSequenceIdFile</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">MergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/MergeTableRegionsProcedure.html#writeMaxSequenceIdFile-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">writeMaxSequenceIdFile</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 96eed6e..8079e92 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -215,8 +215,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 7b435d2..4b549da 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -127,8 +127,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 096e46f..de5d419 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 761a814..1c10e27 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,10 +216,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 4ba7480..efe3c3d 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -231,10 +231,10 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 72c9098..3c3ea5f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -717,18 +717,18 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 23060c2..6851ee1 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 30c4e73..cd3870f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -207,8 +207,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 8051208..f594c43 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -142,9 +142,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index dfa02b5..7ba3a64 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,8 +191,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 2cef8bd..81a90a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -199,9 +199,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>


[05/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[13/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[18/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html
new file mode 100644
index 0000000..a4ce21e
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html
@@ -0,0 +1,424 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestReportRegionStateTransitionRetry (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestReportRegionStateTransitionRetry (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportRegionStateTransitionRetry.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestReportRegionStateTransitionRetry" class="title">Class TestReportRegionStateTransitionRetry</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.54">TestReportRegionStateTransitionRetry</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#CF">CF</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#NAME">NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#RESUME_AND_FAIL">RESUME_AND_FAIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#TestReportRegionStateTransitionRetry--">TestReportRegionStateTransitionRetry</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#setUp--">setUp</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#testRetryOnClose--">testRetryOnClose</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.57">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="RESUME_AND_FAIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>RESUME_AND_FAIL</h4>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.60">RESUME_AND_FAIL</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.97">UTIL</a></pre>
+</li>
+</ul>
+<a name="NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NAME</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.99">NAME</a></pre>
+</li>
+</ul>
+<a name="CF">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CF</h4>
+<pre>private static&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.101">CF</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestReportRegionStateTransitionRetry--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestReportRegionStateTransitionRetry</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.54">TestReportRegionStateTransitionRetry</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.104">setUp</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.112">tearDown</a>()
+                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testRetryOnClose--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testRetryOnClose</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#line.117">testRetryOnClose</a>()
+                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestReportRegionStateTransitionRetry.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
index 429444f..c014950 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -543,7 +543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
new file mode 100644
index 0000000..cac5728
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.AssignmentManagerForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.AssignmentManagerForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.AssignmentManagerForTest</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.AssignmentManagerForTest</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html
new file mode 100644
index 0000000..9c5c2c4
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.HMasterForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.HMasterForTest</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.HMasterForTest</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.html
new file mode 100644
index 0000000..3cb28c7
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/class-use/TestReportRegionStateTransitionRetry.html" target="_top">Frames</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
index 5fa798e..e9ea8ea 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
@@ -42,6 +42,9 @@
 <li><a href="TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace</a></li>
 <li><a href="TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></li>
 <li><a href="TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace.HMasterForTest</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportRegionStateTransitionRetry</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></li>
+<li><a href="TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportRegionStateTransitionRetry.HMasterForTest</a></li>
 <li><a href="TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRogueRSAssignment</a></li>
 <li><a href="TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestSplitTableRegionProcedure</a></li>
 <li><a href="TestTransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestTransitRegionStateProcedure</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
index ef7dced..daf9cdc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
@@ -211,16 +211,28 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></td>
 <td class="colLast">
 <div class="block">Tests to verify master/ assignment manager functionality against rogue RS</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestTransitRegionStateProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index c8b76bd..54ea0d1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -84,6 +84,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.assignment.AssignmentManager (implements org.apache.hadoop.hbase.master.ServerListener)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">AssignmentTestingUtil</span></a></li>
@@ -94,6 +95,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.HMaster (implements org.apache.hadoop.hbase.master.MasterServices)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.HMasterForTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.HMasterForTest</span></a></li>
 </ul>
 </li>
 </ul>
@@ -176,6 +178,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionReplicaSplit.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionReplicaSplit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionStates</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRogueRSAssignment</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestSplitTableRegionProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestTransitRegionStateProcedure</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index a83d7e2..56726ae 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -579,15 +579,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index a1c9b1d..28973e0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index bf7453f..6e82899 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -234,10 +234,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index bb2867a..d7c69fc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -701,11 +701,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index 2f18340..1bd5f18 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 9e0700e..68397c8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -141,9 +141,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index c0be152..4029df4 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -601,6 +601,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.assignment.AssignmentManager (implements org.apache.hadoop.hbase.master.ServerListener)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.AssignmentManagerForTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">AssignmentTestingUtil</span></a></li>
@@ -1109,6 +1110,7 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.NeverInitializedMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReportForDuty.NeverInitializedMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationProcedureRetry.MockHMaster.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationProcedureRetry.MockHMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.HMasterForTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestShutdownBackupMaster.MockHMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestSplitTransactionOnCluster.MyMaster</span></a></li>
 </ul>
@@ -3569,6 +3571,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.RegionServerStoppedCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.SlowMeCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestReseekTo</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestResettingCounters.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestResettingCounters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestResourceFilter.html" title="class in org.apache.hadoop.hbase.rest"><span class="typeNameLink">TestResourceFilter</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.MyMapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.MyMapper.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.MyMapper.html
index 12b85b9..dda3b28 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.MyMapper.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.MyMapper.html
@@ -64,7 +64,7 @@
 <span class="sourceLineNo">056</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.56"></a>
 <span class="sourceLineNo">057</span>public class ScanPerformanceEvaluation extends AbstractHBaseTool {<a name="line.57"></a>
 <span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private static final String HBASE_COUNTER_GROUP_NAME = "HBase Counters";<a name="line.59"></a>
+<span class="sourceLineNo">059</span>  private static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>  private String type;<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private String file;<a name="line.62"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html
index 12b85b9..dda3b28 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html
@@ -64,7 +64,7 @@
 <span class="sourceLineNo">056</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.56"></a>
 <span class="sourceLineNo">057</span>public class ScanPerformanceEvaluation extends AbstractHBaseTool {<a name="line.57"></a>
 <span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private static final String HBASE_COUNTER_GROUP_NAME = "HBase Counters";<a name="line.59"></a>
+<span class="sourceLineNo">059</span>  private static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>  private String type;<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private String file;<a name="line.62"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.html
index 12b85b9..dda3b28 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/ScanPerformanceEvaluation.html
@@ -64,7 +64,7 @@
 <span class="sourceLineNo">056</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.56"></a>
 <span class="sourceLineNo">057</span>public class ScanPerformanceEvaluation extends AbstractHBaseTool {<a name="line.57"></a>
 <span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private static final String HBASE_COUNTER_GROUP_NAME = "HBase Counters";<a name="line.59"></a>
+<span class="sourceLineNo">059</span>  private static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>  private String type;<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private String file;<a name="line.62"></a>


[21/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 242f8eb..5c0d243 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -461,7 +461,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index c7f8284..7f8e4da 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -341,7 +341,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index a83cd56..58b409d 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -421,7 +421,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 0b66450..9ae45aa 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -301,7 +301,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 6e4b2ff..2817692 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -298,7 +298,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index c0d2180..868d66b 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -501,7 +501,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index e62356e..39e0e01 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -351,7 +351,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 1801bed..413ffaf 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -469,7 +469,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index eaa0afe..bc3ae18 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -450,7 +450,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 20d1f60..aeb6314 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 707f04f..16f2147 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -381,7 +381,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 5f33a59..5737fa7 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -779,7 +779,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 4c73314..f2f9a4f 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -345,7 +345,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 31b7403..8b1fdd6 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -315,7 +315,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 981cd7c..8344f1d 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index f0ba8a6..8a61178 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -318,7 +318,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 9dca7b7..39eff36 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -313,7 +313,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index dafd106..eb4677f 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index d19029d..80125dc 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -309,7 +309,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 8e0fcad..415aef5 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -343,7 +343,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index f5ee24a..e1b450e 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -530,7 +530,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index acc2099..a40c186 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -776,7 +776,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 65e18a5..66ddb86 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1969,6 +1969,9 @@
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportOnlineRegionsRace.HMasterForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportRegionStateTransitionRetry</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestReportRegionStateTransitionRetry.HMasterForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestReseekTo</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestResettingCounters.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestResettingCounters</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestResourceFilter.html" title="class in org.apache.hadoop.hbase.rest" target="classFrame">TestResourceFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index d037286..107afb0 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1969,6 +1969,9 @@
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestReseekTo.html" title="class in org.apache.hadoop.hbase.io.hfile">TestReseekTo</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestResettingCounters.html" title="class in org.apache.hadoop.hbase.regionserver">TestResettingCounters</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/TestResourceFilter.html" title="class in org.apache.hadoop.hbase.rest">TestResourceFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index 581f601..28a1975 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -1357,7 +1357,7 @@
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/ScanPerformanceEvaluation.html#HBASE_COUNTER_GROUP_NAME">HBASE_COUNTER_GROUP_NAME</a></code></td>
-<td class="colLast"><code>"HBase Counters"</code></td>
+<td class="colLast"><code>"HBaseCounters"</code></td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index dc8eb20..248c110 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -2019,6 +2019,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#AssignmentManagerForTest-org.apache.hadoop.hbase.master.MasterServices-">AssignmentManagerForTest(MasterServices)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">AssignmentTestingUtil</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html#AssignmentTestingUtil--">AssignmentTestingUtil()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentTestingUtil.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentTestingUtil</a></dt>
@@ -3421,6 +3423,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestTransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestTransitRegionStateProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.html#CF">CF</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCloneSnapshotProcedure</a></dt>
@@ -5193,6 +5197,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -9630,6 +9636,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html" title="class in org.apache.hadoop.hbase.master">TestCloseAnOpeningRegion.MockHMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure(RegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></dt>
@@ -20567,6 +20575,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.HMasterForTest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.html#hmm">hmm</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestMetricsHeapMemoryManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.html#HOARD_FRC_OF_REGIONS">HOARD_FRC_OF_REGIONS</a></span> - Static variable in class org.apache.hadoop.hbase.chaos.actions.<a href="org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.html" title="class in org.apache.hadoop.hbase.chaos.actions">UnbalanceKillAndRebalanceAction</a></dt>
@@ -27379,6 +27389,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -34015,6 +34027,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition(RegionServerStatusProtos.ReportRegionStateTransitionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace.AssignmentManagerForTest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html#reportRegionStateTransition-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest-">reportRegionStateTransition(RegionServerStatusProtos.ReportRegionStateTransitionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">reportRegionStateTransition(RegionServerServices.RegionStateTransitionContext)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">reportRegionStateTransition(RegionServerServices.RegionStateTransitionContext)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
@@ -34488,6 +34502,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/RESTApiClusterManager.html#resume-org.apache.hadoop.hbase.ClusterManager.ServiceType-java.lang.String-int-">resume(ClusterManager.ServiceType, String, int)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/RESTApiClusterManager.html" title="class in org.apache.hadoop.hbase">RESTApiClusterManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#RESUME_AND_FAIL">RESUME_AND_FAIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#RESUME_REPORT_STATE">RESUME_REPORT_STATE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#RESUME_RS_REPORT">RESUME_RS_REPORT</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
@@ -36687,7 +36703,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.SendToOtherTableCoprocessor.html#SendToOtherTableCoprocessor--">SendToOtherTableCoprocessor()</a></span> - Constructor for class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.SendToOtherTableCoprocessor.html" title="class in org.apache.hadoop.hbase.coprocessor">TestOpenTableInCoprocessor.SendToOtherTableCoprocessor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">sendTransitionReport(ServerName, HBaseProtos.RegionInfo, RegionServerStatusProtos.RegionStateTransition.TransitionCode)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">sendTransitionReport(ServerName, HBaseProtos.RegionInfo, RegionServerStatusProtos.RegionStateTransition.TransitionCode, long)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.html#SEQ_SHARDS_PER_SERVER_KEY">SEQ_SHARDS_PER_SERVER_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">StripeCompactionsPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
@@ -37839,6 +37855,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -43343,6 +43361,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>
@@ -61086,6 +61106,14 @@
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.HMasterForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#TestReportRegionStateTransitionRetry--">TestReportRegionStateTransitionRetry()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.AssignmentManagerForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.AssignmentManagerForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.HMasterForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#testReportRSWithWrongRegion--">testReportRSWithWrongRegion()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>
 <div class="block">Ignore this test, see HBASE-21421</div>
@@ -61362,6 +61390,8 @@
  against hbase:meta while its hosted server is restarted to prove our retrying
  works.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#testRetryOnClose--">testRetryOnClose()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.html#testRetryOnIOException--">testRetryOnIOException()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.tool">TestLoadIncrementalHFilesSplitRecovery</a></dt>
 <dd>
 <div class="block">Test that shows that exception thrown from the RS side will result in the expected number of
@@ -68685,6 +68715,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestSplitTableRegionProcedure</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
index 0c6960a..34a9d0e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.177">TestBackupBase.FullTableBackupClientForTest</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.178">TestBackupBase.FullTableBackupClientForTest</a>
 extends org.apache.hadoop.hbase.backup.impl.FullTableBackupClient</pre>
 </li>
 </ul>
@@ -241,7 +241,7 @@ extends org.apache.hadoop.hbase.backup.impl.FullTableBackupClient</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>FullTableBackupClientForTest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html#line.178">FullTableBackupClientForTest</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html#line.179">FullTableBackupClientForTest</a>()</pre>
 </li>
 </ul>
 <a name="FullTableBackupClientForTest-org.apache.hadoop.hbase.client.Connection-java.lang.String-org.apache.hadoop.hbase.backup.BackupRequest-">
@@ -250,7 +250,7 @@ extends org.apache.hadoop.hbase.backup.impl.FullTableBackupClient</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FullTableBackupClientForTest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html#line.181">FullTableBackupClientForTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html#line.182">FullTableBackupClientForTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId,
                                     org.apache.hadoop.hbase.backup.BackupRequest&nbsp;request)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -274,7 +274,7 @@ extends org.apache.hadoop.hbase.backup.impl.FullTableBackupClient</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execute</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html#line.187">execute</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html#line.188">execute</a>()
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
index 9a155f3..8f32098 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.111">TestBackupBase.IncrementalTableBackupClientForTest</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.112">TestBackupBase.IncrementalTableBackupClientForTest</a>
 extends org.apache.hadoop.hbase.backup.impl.IncrementalTableBackupClient</pre>
 </li>
 </ul>
@@ -241,7 +241,7 @@ extends org.apache.hadoop.hbase.backup.impl.IncrementalTableBackupClient</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>IncrementalTableBackupClientForTest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html#line.112">IncrementalTableBackupClientForTest</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html#line.113">IncrementalTableBackupClientForTest</a>()</pre>
 </li>
 </ul>
 <a name="IncrementalTableBackupClientForTest-org.apache.hadoop.hbase.client.Connection-java.lang.String-org.apache.hadoop.hbase.backup.BackupRequest-">
@@ -250,7 +250,7 @@ extends org.apache.hadoop.hbase.backup.impl.IncrementalTableBackupClient</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IncrementalTableBackupClientForTest</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html#line.115">IncrementalTableBackupClientForTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html#line.116">IncrementalTableBackupClientForTest</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId,
                                            org.apache.hadoop.hbase.backup.BackupRequest&nbsp;request)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -274,7 +274,7 @@ extends org.apache.hadoop.hbase.backup.impl.IncrementalTableBackupClient</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execute</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html#line.121">execute</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.IncrementalTableBackupClientForTest.html#line.122">execute</a>()
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>


[27/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
index 65ec57d..bdf727e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":9,"i15":10,"i16":10,"i17":9,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":9,"i25":10,"i26":10,"i27":9,"i28":10};
+var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":9,"i16":10,"i17":10,"i18":9,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":9,"i27":10,"i28":10,"i29":9,"i30":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -134,7 +134,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.99">TransitRegionStateProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.103">TransitRegionStateProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineRegionProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&gt;</pre>
 <div class="block">The procedure to deal with the state transition of a region. A region with a TRSP in place is
  called RIT, i.e, RegionInTransition.
@@ -393,27 +393,33 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
                             <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
 <tr id="i14" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#isOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">isOpening</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+         <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+         org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#move-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">move</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
     <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#openRegion-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">openRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
           <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#queueAssign-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">queueAssign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
            <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reopen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-">reopen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
       <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
@@ -421,65 +427,69 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
                 org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
                 long&nbsp;seqId)</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">reportTransitionClosed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                      <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</code>&nbsp;</td>
-</tr>
 <tr id="i20" class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpened-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransitionOpened</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionClosed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                       <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                      <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
-                      long&nbsp;openSeqNum)</code>&nbsp;</td>
+                      <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
 <tr id="i21" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionFailedOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionFailedOpen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                          <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-long-">reportTransitionOpen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                    <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                    <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+                    long&nbsp;openSeqNum)</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-">rollbackState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)</code>
 <div class="block">called to perform the rollback of the specified state</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
 <div class="block">The user-level code of the procedure may have some state to
  persist (e.g.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#serverCrashed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">serverCrashed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
              <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</code>&nbsp;</td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#setOwner-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure-">setOwner</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
         <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">At end of timeout, wake ourselves up so we run again.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</code>
 <div class="block">Extend the toString() information with the procedure details
  e.g.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#unassign-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-">unassign</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
         <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
@@ -543,7 +553,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.102">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.106">LOG</a></pre>
 </li>
 </ul>
 <a name="initialState">
@@ -552,7 +562,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>initialState</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.104">initialState</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.108">initialState</a></pre>
 </li>
 </ul>
 <a name="lastState">
@@ -561,7 +571,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>lastState</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.106">lastState</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.110">lastState</a></pre>
 </li>
 </ul>
 <a name="assignCandidate">
@@ -570,7 +580,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>assignCandidate</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.109">assignCandidate</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.113">assignCandidate</a></pre>
 </li>
 </ul>
 <a name="forceNewPlan">
@@ -579,7 +589,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>forceNewPlan</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.111">forceNewPlan</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.115">forceNewPlan</a></pre>
 </li>
 </ul>
 <a name="attempt">
@@ -588,7 +598,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>attempt</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.113">attempt</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.117">attempt</a></pre>
 </li>
 </ul>
 </li>
@@ -605,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>TransitRegionStateProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.115">TransitRegionStateProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.119">TransitRegionStateProcedure</a>()</pre>
 </li>
 </ul>
 <a name="TransitRegionStateProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-boolean-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-">
@@ -614,7 +624,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TransitRegionStateProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.119">TransitRegionStateProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.123">TransitRegionStateProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                       <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                       <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;assignCandidate,
                                       boolean&nbsp;forceNewPlan,
@@ -636,7 +646,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableOperationType</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.130">getTableOperationType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.134">getTableOperationType</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
 <div class="block">Given an operation type we can take decisions about what to do with pending operations.
  e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -657,7 +667,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>waitInitialized</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.136">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.140">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
  call us to determine whether we need to wait for initialization, second, it will call
@@ -682,7 +692,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>queueAssign</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.146">queueAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.150">queueAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                          <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)
                   throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
 <dl>
@@ -697,7 +707,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>openRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.171">openRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.175">openRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                         <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -712,7 +722,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>confirmOpened</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.184">confirmOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.188">confirmOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -727,7 +737,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.222">closeRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.226">closeRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                          <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -742,7 +752,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>confirmClosed</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.236">confirmClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.240">confirmClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -757,7 +767,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>execute</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.280">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.284">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                        throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
                               <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -787,7 +797,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionStateNode</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.292">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.296">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 </li>
 </ul>
 <a name="executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-">
@@ -796,7 +806,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>executeFromState</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.297">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.301">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)
                                                throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
                                                       <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -823,7 +833,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeoutFailure</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.343">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.347">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block">At end of timeout, wake ourselves up so we run again.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -834,34 +844,54 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 </dl>
 </li>
 </ul>
-<a name="reportTransitionOpened-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">
+<a name="isOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>reportTransitionOpened</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.349">reportTransitionOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
-                                    <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                                    <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                                    org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
-                                    long&nbsp;openSeqNum)
-                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<h4>isOpening</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.353">isOpening</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+                          org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)</pre>
+</li>
+</ul>
+<a name="reportTransitionOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>reportTransitionOpen</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.370">reportTransitionOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                                  <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+                                  long&nbsp;openSeqNum)
+                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
 </dl>
 </li>
 </ul>
-<a name="reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">
+<a name="reportTransitionFailedOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>reportTransitionFailedOpen</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.407">reportTransitionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+                                        <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
+                                        <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+</li>
+</ul>
+<a name="reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>reportTransitionClosed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.384">reportTransitionClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.434">reportTransitionClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                     <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
-                                    <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
-                                    org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code)
+                                    <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -875,7 +905,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>reportTransition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.402">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.467">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                              <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode&nbsp;code,
@@ -893,7 +923,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>serverCrashed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.418">serverCrashed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.490">serverCrashed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                           <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode,
                           <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -909,7 +939,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAndCheckMaxAttempts</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.448">incrementAndCheckMaxAttempts</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.520">incrementAndCheckMaxAttempts</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                              <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
@@ -919,7 +949,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.457">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.529">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -941,7 +971,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.464">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.536">getState</a>(int&nbsp;stateId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 <dl>
@@ -960,7 +990,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.469">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.541">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 <dl>
@@ -979,7 +1009,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.474">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.546">getInitialState</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 <dl>
@@ -996,7 +1026,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.479">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.551">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">The user-level code of the procedure may have some state to
@@ -1018,7 +1048,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.491">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.562">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">Called on store load to allow the user to decode the previously serialized
@@ -1039,7 +1069,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedureMetrics</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.504">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.575">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">Override this method to provide procedure specific counters for submitted count, failed
  count and time histogram.</div>
@@ -1059,7 +1089,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringClassDetails</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.514">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.585">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
 <div class="block">Extend the toString() information with the procedure details
  e.g. className and parameters</div>
@@ -1077,7 +1107,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setOwner</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.525">setOwner</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.596">setOwner</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                     <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
@@ -1087,7 +1117,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>assign</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.534">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.605">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                  @Nullable
                                                  <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</pre>
@@ -1099,7 +1129,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>unassign</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.542">unassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.613">unassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                    <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
@@ -1109,7 +1139,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>reopen</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.549">reopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.620">reopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
@@ -1119,7 +1149,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>move</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.556">move</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.627">move</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                @Nullable
                                                <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</pre>


[29/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/2bd8387f
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/2bd8387f
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/2bd8387f

Branch: refs/heads/asf-site
Commit: 2bd8387fd937127a62d100bee05d0c797be1b4be
Parents: 5215eb5
Author: jenkins <bu...@apache.org>
Authored: Wed Nov 14 14:52:28 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Wed Nov 14 14:52:28 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 .../hbase/mapreduce/TableRecordReaderImpl.html  |    2 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |   12 +-
 checkstyle.rss                                  |   16 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |    8 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hadoop/hbase/backup/util/BackupUtils.html   |   80 +-
 .../hadoop/hbase/class-use/ServerName.html      |   68 +-
 .../hadoop/hbase/client/package-tree.html       |   26 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    4 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    2 +-
 .../assignment/TransitRegionStateProcedure.html |  172 ++-
 .../assignment/class-use/RegionStateNode.html   |   64 +-
 .../hadoop/hbase/master/package-tree.html       |    2 +-
 .../procedure/class-use/MasterProcedureEnv.html |   70 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   14 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html |   16 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../replication/regionserver/package-tree.html  |    2 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    8 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../hadoop/hbase/backup/util/BackupUtils.html   | 1399 +++++++++---------
 .../hbase/mapreduce/TableRecordReaderImpl.html  |    2 +-
 .../assignment/TransitRegionStateProcedure.html | 1139 +++++++-------
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    3 +
 testdevapidocs/allclasses-noframe.html          |    3 +
 testdevapidocs/constant-values.html             |    2 +-
 testdevapidocs/index-all.html                   |   34 +-
 ...BackupBase.FullTableBackupClientForTest.html |    8 +-
 ...ase.IncrementalTableBackupClientForTest.html |    8 +-
 .../hadoop/hbase/backup/TestBackupBase.html     |   84 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hbase/class-use/HBaseClassTestRule.html     |    4 +
 .../hbase/class-use/HBaseTestingUtility.html    |    4 +
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../assignment/TestAMAssignWithRandExec.html    |    2 +-
 .../assignment/TestAMServerFailedOpen.html      |    2 +-
 .../assignment/TestAssignmentManager.html       |    2 +-
 ...tAssignmentManagerBase.FaultyRsExecutor.html |    8 +-
 ...estAssignmentManagerBase.GoodRsExecutor.html |    2 +-
 ...agerBase.HangOnCloseThenRSCrashExecutor.html |   10 +-
 ...mentManagerBase.HangThenRSCrashExecutor.html |    8 +-
 ...ntManagerBase.HangThenRSRestartExecutor.html |    8 +-
 ...estAssignmentManagerBase.MockRSExecutor.html |    4 +-
 ...ockRSProcedureDispatcher.MockRemoteCall.html |    6 +-
 ...ntManagerBase.MockRSProcedureDispatcher.html |   10 +-
 ...estAssignmentManagerBase.RandRsExecutor.html |   12 +-
 ...nagerBase.ServerNotYetRunningRsExecutor.html |    6 +-
 ...mentManagerBase.SocketTimeoutRsExecutor.html |   16 +-
 .../assignment/TestAssignmentManagerBase.html   |   12 +-
 ...tReportOnlineRegionsRace.HMasterForTest.html |    4 +-
 ...ransitionRetry.AssignmentManagerForTest.html |  336 +++++
 ...gionStateTransitionRetry.HMasterForTest.html |  406 +++++
 .../TestReportRegionStateTransitionRetry.html   |  424 ++++++
 .../assignment/TestRogueRSAssignment.html       |    4 +-
 ...ransitionRetry.AssignmentManagerForTest.html |  125 ++
 ...gionStateTransitionRetry.HMasterForTest.html |  125 ++
 .../TestReportRegionStateTransitionRetry.html   |  125 ++
 .../hbase/master/assignment/package-frame.html  |    3 +
 .../master/assignment/package-summary.html      |   16 +-
 .../hbase/master/assignment/package-tree.html   |    3 +
 .../org/apache/hadoop/hbase/package-tree.html   |    8 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    6 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |    3 +
 .../ScanPerformanceEvaluation.MyMapper.html     |    2 +-
 .../ScanPerformanceEvaluation.ScanCounter.html  |    2 +-
 .../hadoop/hbase/ScanPerformanceEvaluation.html |    2 +-
 ...BackupBase.FullTableBackupClientForTest.html |  877 +++++------
 ...ase.IncrementalTableBackupClientForTest.html |  877 +++++------
 .../hadoop/hbase/backup/TestBackupBase.html     |  877 +++++------
 ...tAssignmentManagerBase.FaultyRsExecutor.html |  595 ++++----
 ...estAssignmentManagerBase.GoodRsExecutor.html |  595 ++++----
 ...agerBase.HangOnCloseThenRSCrashExecutor.html |  595 ++++----
 ...mentManagerBase.HangThenRSCrashExecutor.html |  595 ++++----
 ...ntManagerBase.HangThenRSRestartExecutor.html |  595 ++++----
 ...estAssignmentManagerBase.MockRSExecutor.html |  595 ++++----
 ...ockRSProcedureDispatcher.MockRemoteCall.html |  595 ++++----
 ...ntManagerBase.MockRSProcedureDispatcher.html |  595 ++++----
 ...estAssignmentManagerBase.NoopRsExecutor.html |  595 ++++----
 ...estAssignmentManagerBase.RandRsExecutor.html |  595 ++++----
 ...nagerBase.ServerNotYetRunningRsExecutor.html |  595 ++++----
 ...mentManagerBase.SocketTimeoutRsExecutor.html |  595 ++++----
 .../assignment/TestAssignmentManagerBase.html   |  595 ++++----
 ...ransitionRetry.AssignmentManagerForTest.html |  218 +++
 ...gionStateTransitionRetry.HMasterForTest.html |  218 +++
 .../TestReportRegionStateTransitionRetry.html   |  218 +++
 132 files changed, 9314 insertions(+), 6852 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index d7a51a2..5b1f24d 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -611,7 +611,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index c3e201d..9eeb863 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20181113143306+00'00')
-/CreationDate (D:20181113144824+00'00')
+/ModDate (D:20181114143300+00'00')
+/CreationDate (D:20181114144901+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
index 8efa561..f27a848 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
@@ -61,7 +61,7 @@
 <span class="sourceLineNo">053</span><a name="line.53"></a>
 <span class="sourceLineNo">054</span>  // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  @VisibleForTesting<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBase Counters";<a name="line.56"></a>
+<span class="sourceLineNo">056</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.56"></a>
 <span class="sourceLineNo">057</span>  private ResultScanner scanner = null;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>  private Scan scan = null;<a name="line.58"></a>
 <span class="sourceLineNo">059</span>  private Scan currentScan = null;<a name="line.59"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 88bf7e3..37aaa1e 100644
--- a/book.html
+++ b/book.html
@@ -41318,7 +41318,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-11-13 14:33:06 UTC
+Last updated 2018-11-14 14:33:00 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 9a597f0..9d5eba7 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -316,7 +316,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index c630be0..0ee5ffc 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,7 +291,7 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3805</td>
+<td>3806</td>
 <td>0</td>
 <td>0</td>
 <td>15073</td></tr></table></div>
@@ -9826,12 +9826,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>730</td>
+<td>731</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3495</td>
+<td>3494</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -19125,7 +19125,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input '   *' while parsing JAVADOC_TAG</td>
 <td>117</td></tr>
 <tr class="a">
@@ -117243,7 +117243,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index f5b78d2..b3dec4e 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,7 +25,7 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3805,
+      <title>File: 3806,
              Errors: 15073,
              Warnings: 0,
              Infos: 0
@@ -9020,6 +9020,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestReportRegionStateTransitionRetry.java">org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.zookeeper.TestZKUtilNoServer.java">org/apache/hadoop/hbase/zookeeper/TestZKUtilNoServer.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index fedeef6..cf6c386 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -385,7 +385,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 702dc03..b7b096b 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 5766010..9ed44a1 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -680,7 +680,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 39a77c2..92e047d 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -323,7 +323,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 61c92ea..09a52de 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181113" />
+    <meta name="Date-Revision-yyyymmdd" content="20181114" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1009,7 +1009,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-13</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-14</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 72e3bd6..cf1f33f 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,7 +3824,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Tue Nov 13 14:43:38 UTC 2018"</code></td>
+<td class="colLast"><code>"Wed Nov 14 14:43:46 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3838,7 +3838,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"55a6c0a68f033730bffcb68c308d426e"</code></td>
+<td class="colLast"><code>"c47ab65d5523b7b5e171647165abbf68"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -12897,7 +12897,7 @@
 <!--   -->
 </a><code>static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#HBASE_COUNTER_GROUP_NAME">HBASE_COUNTER_GROUP_NAME</a></code></td>
-<td class="colLast"><code>"HBase Counters"</code></td>
+<td class="colLast"><code>"HBaseCounters"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.LOG_PER_ROW_COUNT">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index ddf4124..036587e 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -64602,6 +64602,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionState.html#isOpenedOnServer-org.apache.hadoop.hbase.ServerName-">isOpenedOnServer(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#isOpening-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">isOpening(RegionStateNode, ServerName, RegionServerStatusProtos.RegionStateTransition.TransitionCode)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionState.html#isOpening--">isOpening()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionState.html#isOpeningOrFailedOpenOnServer-org.apache.hadoop.hbase.ServerName-">isOpeningOrFailedOpenOnServer(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a></dt>
@@ -94655,9 +94657,11 @@ service.</div>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 &nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">reportTransitionClosed(MasterProcedureEnv, RegionStateNode, ServerName, RegionServerStatusProtos.RegionStateTransition.TransitionCode)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionClosed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionClosed(MasterProcedureEnv, RegionStateNode, ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionFailedOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-">reportTransitionFailedOpen(MasterProcedureEnv, RegionStateNode, ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpened-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">reportTransitionOpened(MasterProcedureEnv, RegionStateNode, ServerName, RegionServerStatusProtos.RegionStateTransition.TransitionCode, long)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#reportTransitionOpen-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.ServerName-long-">reportTransitionOpen(MasterProcedureEnv, RegionStateNode, ServerName, long)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/MetricsConnection.html#REQ_BASE">REQ_BASE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index f7aa217..155a44c 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,8 +167,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/devapidocs/org/apache/hadoop/hbase/backup/util/BackupUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/util/BackupUtils.html b/devapidocs/org/apache/hadoop/hbase/backup/util/BackupUtils.html
index 0775e45..52fa091 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/util/BackupUtils.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/util/BackupUtils.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.70">BackupUtils</a>
+public final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.71">BackupUtils</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">A collection for methods used by multiple classes to backup HBase tables.</div>
 </li>
@@ -426,7 +426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.71">LOG</a></pre>
+<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.72">LOG</a></pre>
 </li>
 </ul>
 <a name="LOGNAME_SEPARATOR">
@@ -435,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOGNAME_SEPARATOR</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.72">LOGNAME_SEPARATOR</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.73">LOGNAME_SEPARATOR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.util.BackupUtils.LOGNAME_SEPARATOR">Constant Field Values</a></dd>
@@ -448,7 +448,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MILLISEC_IN_HOUR</h4>
-<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.73">MILLISEC_IN_HOUR</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.74">MILLISEC_IN_HOUR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.backup.util.BackupUtils.MILLISEC_IN_HOUR">Constant Field Values</a></dd>
@@ -469,7 +469,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BackupUtils</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.75">BackupUtils</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.76">BackupUtils</a>()</pre>
 </li>
 </ul>
 </li>
@@ -486,7 +486,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSLogTimestampMins</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.85">getRSLogTimestampMins</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&
 lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;rsLogTimestampMap)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.86">getRSLogTimestampMins</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&
 lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;rsLogTimestampMap)</pre>
 <div class="block">Loop through the RS log timestamp map for the tables, for each RS, find the min timestamp value
  for the RS among the tables.</div>
 <dl>
@@ -503,7 +503,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>copyTableRegionInfo</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.125">copyTableRegionInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.126">copyTableRegionInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                                        <a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;backupInfo,
                                        org.apache.hadoop.conf.Configuration&nbsp;conf)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -525,7 +525,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRegioninfoOnFilesystem</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.164">writeRegioninfoOnFilesystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.165">writeRegioninfoOnFilesystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                org.apache.hadoop.fs.Path&nbsp;regionInfoDir,
                                                <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
@@ -543,7 +543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parseHostNameFromLogFile</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.184">parseHostNameFromLogFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.185">parseHostNameFromLogFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Parses hostname:port from WAL file path</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -559,7 +559,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUniqueWALFileNamePart</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.208">getUniqueWALFileNamePart</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;walFileName)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.209">getUniqueWALFileNamePart</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;walFileName)</pre>
 <div class="block">Returns WAL file name</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -575,7 +575,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getUniqueWALFileNamePart</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.217">getUniqueWALFileNamePart</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.218">getUniqueWALFileNamePart</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Returns WAL file name</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -591,7 +591,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilesLength</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.228">getFilesLength</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.229">getFilesLength</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                   org.apache.hadoop.fs.Path&nbsp;dir)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get the total length of files under the given directory recursively.</div>
@@ -612,7 +612,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFilesOlderThan</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.250">getWALFilesOlderThan</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.251">getWALFilesOlderThan</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;hostTimestampMap)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get list of all old WAL files (WALs and archive)</div>
@@ -633,7 +633,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parseTableNames</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.280">parseTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tables)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.281">parseTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tables)</pre>
 </li>
 </ul>
 <a name="checkPathExist-java.lang.String-org.apache.hadoop.conf.Configuration-">
@@ -642,7 +642,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkPathExist</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.300">checkPathExist</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupStr,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.301">checkPathExist</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupStr,
                                      org.apache.hadoop.conf.Configuration&nbsp;conf)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check whether the backup path exist</div>
@@ -663,7 +663,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTargetDir</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.320">checkTargetDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootPath,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.321">checkTargetDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootPath,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check target path first, confirm it doesn't exist before backup</div>
@@ -682,7 +682,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMinValue</h4>
-<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.350">getMinValue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;T,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;map)</pre>
+<pre>public static&nbsp;&lt;T&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.351">getMinValue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;T,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;map)</pre>
 <div class="block">Get the min value for all the Values a map.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -698,7 +698,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>parseHostFromOldLog</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.366">parseHostFromOldLog</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.367">parseHostFromOldLog</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Parses host name:port from archived WAL path</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -714,7 +714,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCreationTime</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.384">getCreationTime</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.385">getCreationTime</a>(org.apache.hadoop.fs.Path&nbsp;p)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Given the log file, parse the timestamp from the file name. The timestamp is the last number.</div>
 <dl>
@@ -733,7 +733,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getFiles</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.393">getFiles</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.394">getFiles</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                     org.apache.hadoop.fs.Path&nbsp;rootDir,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;files,
                                     org.apache.hadoop.fs.PathFilter&nbsp;filter)
@@ -750,7 +750,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupBackupData</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.410">cleanupBackupData</a>(<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;context,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.411">cleanupBackupData</a>(<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;context,
                                      org.apache.hadoop.conf.Configuration&nbsp;conf)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -765,7 +765,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupHLogDir</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.421">cleanupHLogDir</a>(<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;backupInfo,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.422">cleanupHLogDir</a>(<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;backupInfo,
                                    org.apache.hadoop.conf.Configuration&nbsp;conf)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Clean up directories which are generated when DistCp copying hlogs</div>
@@ -784,7 +784,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupTargetDir</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.440">cleanupTargetDir</a>(<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;backupInfo,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.441">cleanupTargetDir</a>(<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;backupInfo,
                                      org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
@@ -794,7 +794,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableBackupDir</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.485">getTableBackupDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootDir,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.486">getTableBackupDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootDir,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId,
                                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Given the backup root dir, backup id and the table name, return the backup image location,
@@ -816,7 +816,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sortHistoryListDesc</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.497">sortHistoryListDesc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;historyList)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.498">sortHistoryListDesc</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;historyList)</pre>
 <div class="block">Sort history list by start time in descending order.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -832,7 +832,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>listStatus</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.519">listStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.520">listStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                            org.apache.hadoop.fs.Path&nbsp;dir,
                                                            org.apache.hadoop.fs.PathFilter&nbsp;filter)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -857,7 +857,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.547">getPath</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.548">getPath</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Return the 'path' component of a Path. In Hadoop, Path is an URI. This method returns the
  'path' component of a Path's URI: e.g. If a Path is
  <code>hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir</code>, this method returns
@@ -877,7 +877,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogBackupDir</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.558">getLogBackupDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootDir,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.559">getLogBackupDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootDir,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)</pre>
 <div class="block">Given the backup root dir and the backup id, return the log file location for an incremental
  backup.</div>
@@ -896,7 +896,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getHistory</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.563">getHistory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.564">getHistory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                            org.apache.hadoop.fs.Path&nbsp;backupRootPath)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -911,7 +911,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getHistory</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.608">getHistory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.609">getHistory</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                           int&nbsp;n,
                                           org.apache.hadoop.fs.Path&nbsp;backupRootPath,
                                           <a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.Filter.html" title="interface in org.apache.hadoop.hbase.backup">BackupInfo.Filter</a>...&nbsp;filters)
@@ -928,7 +928,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>loadBackupInfo</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.630">loadBackupInfo</a>(org.apache.hadoop.fs.Path&nbsp;backupRootPath,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/backup/BackupInfo.html" title="class in org.apache.hadoop.hbase.backup">BackupInfo</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.631">loadBackupInfo</a>(org.apache.hadoop.fs.Path&nbsp;backupRootPath,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId,
                                         org.apache.hadoop.fs.FileSystem&nbsp;fs)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -944,7 +944,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRestoreRequest</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/backup/RestoreRequest.html" title="class in org.apache.hadoop.hbase.backup">RestoreRequest</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.657">createRestoreRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootDir,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/backup/RestoreRequest.html" title="class in org.apache.hadoop.hbase.backup">RestoreRequest</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.658">createRestoreRequest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupRootDir,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId,
                                                   boolean&nbsp;check,
                                                   <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>[]&nbsp;fromTables,
@@ -970,7 +970,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>validate</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.666">validate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupManifest.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupManifest</a>&gt;&nbsp;backupManifestMap,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.667">validate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/hbase/backup/impl/BackupManifest.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupManifest</a>&gt;&nbsp;backupManifestMap,
                                org.apache.hadoop.conf.Configuration&nbsp;conf)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -985,7 +985,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBulkOutputDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.694">getBulkOutputDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.695">getBulkOutputDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
                                                          org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                          boolean&nbsp;deleteOnExit)
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1001,7 +1001,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBulkOutputDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.708">getBulkOutputDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.709">getBulkOutputDir</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName,
                                                          org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1016,7 +1016,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileNameCompatibleString</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.712">getFileNameCompatibleString</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.713">getFileNameCompatibleString</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 </li>
 </ul>
 <a name="failed-int-">
@@ -1025,7 +1025,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>failed</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.716">failed</a>(int&nbsp;result)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.717">failed</a>(int&nbsp;result)</pre>
 </li>
 </ul>
 <a name="succeeded-int-">
@@ -1034,7 +1034,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>succeeded</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.720">succeeded</a>(int&nbsp;result)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.721">succeeded</a>(int&nbsp;result)</pre>
 </li>
 </ul>
 <a name="createLoader-org.apache.hadoop.conf.Configuration-">
@@ -1043,7 +1043,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createLoader</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.724">createLoader</a>(org.apache.hadoop.conf.Configuration&nbsp;config)
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">LoadIncrementalHFiles</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.725">createLoader</a>(org.apache.hadoop.conf.Configuration&nbsp;config)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1057,7 +1057,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>findMostRecentBackupId</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.745">findMostRecentBackupId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;backupIds)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html#line.746">findMostRecentBackupId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;backupIds)</pre>
 </li>
 </ul>
 </li>


[14/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[11/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[08/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[15/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html
index ca790a5..9f82430 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html
@@ -72,444 +72,449 @@
 <span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.security.access.SecureTestUtil;<a name="line.64"></a>
 <span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.AfterClass;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.junit.Before;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * This class is only a base for other integration-level backup tests. Do not add tests here.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * TestBackupSmallTests is where tests that don't require bring machines up/down should go All other<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * tests should have their own classes and extend this one<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class TestBackupBase {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupBase.class);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL2;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected static Configuration conf1 = TEST_UTIL.getConfiguration();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected static Configuration conf2;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected static TableName table1 = TableName.valueOf("table1");<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  protected static HTableDescriptor table1Desc;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  protected static TableName table2 = TableName.valueOf("table2");<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  protected static TableName table3 = TableName.valueOf("table3");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected static TableName table4 = TableName.valueOf("table4");<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static TableName table1_restore = TableName.valueOf("default:table1");<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static TableName table2_restore = TableName.valueOf("ns2:table2");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  protected static TableName table3_restore = TableName.valueOf("ns3:table3_restore");<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected static TableName table4_restore = TableName.valueOf("ns4:table4_restore");<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected static final int NB_ROWS_IN_BATCH = 99;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected static final byte[] qualName = Bytes.toBytes("q1");<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected static String BACKUP_ROOT_DIR = Path.SEPARATOR +"backupUT";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected static String BACKUP_REMOTE_ROOT_DIR = Path.SEPARATOR + "backupUT";<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  protected static String provider = "defaultProvider";<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected static boolean secure = false;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  protected static boolean autoRestoreOnFailure = true;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected static boolean setupIsDone = false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected static boolean useSecondCluster = false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  static class IncrementalTableBackupClientForTest extends IncrementalTableBackupClient {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public IncrementalTableBackupClientForTest() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public IncrementalTableBackupClientForTest(Connection conn,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        String backupId, BackupRequest request) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      super(conn, backupId, request);<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>    @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    public void execute() throws IOException {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      // case INCREMENTAL_COPY:<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        // case PREPARE_INCREMENTAL:<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        failStageIf(Stage.stage_0);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        beginBackup(backupManager, backupInfo);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>        failStageIf(Stage.stage_1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        backupInfo.setPhase(BackupPhase.PREPARE_INCREMENTAL);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        LOG.debug("For incremental backup, current table set is "<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            + backupManager.getIncrementalBackupTableSet());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        newTimestamps = ((IncrementalBackupManager) backupManager).getIncrBackupLogFileMap();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        // copy out the table and region info files for each table<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        BackupUtils.copyTableRegionInfo(conn, backupInfo, conf);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        // convert WAL to HFiles and copy them to .tmp under BACKUP_ROOT<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        convertWALsToHFiles();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        incrementalCopyHFiles(new String[] {getBulkOutputDir().toString()},<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          backupInfo.getBackupRootDir());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        failStageIf(Stage.stage_2);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        // Save list of WAL files copied<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        backupManager.recordWALFiles(backupInfo.getIncrBackupFileList());<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>        // case INCR_BACKUP_COMPLETE:<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // Set the previousTimestampMap which is before this current log roll to the manifest.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; previousTimestampMap =<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            backupManager.readLogTimestampMap();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        backupInfo.setIncrTimestampMap(previousTimestampMap);<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        failStageIf(Stage.stage_3);<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            backupManager.readLogTimestampMap();<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>        Long newStartCode =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            BackupUtils.getMinValue(BackupUtils.getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>        handleBulkLoad(backupInfo.getTableNames());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        failStageIf(Stage.stage_4);<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>        // backup complete<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        completeBackup(conn, backupInfo, backupManager, BackupType.INCREMENTAL, conf);<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      } catch (Exception e) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        failBackup(conn, backupInfo, backupManager, e, "Unexpected Exception : ",<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          BackupType.INCREMENTAL, conf);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        throw new IOException(e);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  static class FullTableBackupClientForTest extends FullTableBackupClient {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public FullTableBackupClientForTest() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    public FullTableBackupClientForTest(Connection conn, String backupId, BackupRequest request)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throws IOException {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      super(conn, backupId, request);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    public void execute() throws IOException {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      // Get the stage ID to fail on<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      try (Admin admin = conn.getAdmin()) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        // Begin BACKUP<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        beginBackup(backupManager, backupInfo);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        failStageIf(Stage.stage_0);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        String savedStartCode;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        boolean firstBackup;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        // do snapshot for full table backup<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        savedStartCode = backupManager.readBackupStartCode();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        firstBackup = savedStartCode == null || Long.parseLong(savedStartCode) == 0L;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        if (firstBackup) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          // This is our first backup. Let's put some marker to system table so that we can hold the<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          // logs while we do the backup.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          backupManager.writeBackupStartCode(0L);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        failStageIf(Stage.stage_1);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        // We roll log here before we do the snapshot. It is possible there is duplicate data<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        // in the log that is already in the snapshot. But if we do it after the snapshot, we<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        // could have data loss.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        // A better approach is to do the roll log on each RS in the same global procedure as<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        // the snapshot.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        LOG.info("Execute roll log procedure for full backup ...");<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>        Map&lt;String, String&gt; props = new HashMap&lt;&gt;();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        props.put("backupRoot", backupInfo.getBackupRootDir());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        admin.execProcedure(LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_SIGNATURE,<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_NAME, props);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        failStageIf(Stage.stage_2);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        newTimestamps = backupManager.readRegionServerLastLogRollResult();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (firstBackup) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          // Updates registered log files<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          // We record ALL old WAL files as registered, because<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          // this is a first full backup in the system and these<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          // files are not needed for next incremental backup<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          List&lt;String&gt; logFiles = BackupUtils.getWALFilesOlderThan(conf, newTimestamps);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          backupManager.recordWALFiles(logFiles);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // SNAPSHOT_TABLES:<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        backupInfo.setPhase(BackupPhase.SNAPSHOT);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        for (TableName tableName : tableList) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          String snapshotName =<a name="line.229"></a>
-<span class="sourceLineNo">230</span>              "snapshot_" + Long.toString(EnvironmentEdgeManager.currentTime()) + "_"<a name="line.230"></a>
-<span class="sourceLineNo">231</span>                  + tableName.getNamespaceAsString() + "_" + tableName.getQualifierAsString();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>          snapshotTable(admin, tableName, snapshotName);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          backupInfo.setSnapshotName(tableName, snapshotName);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        failStageIf(Stage.stage_3);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // SNAPSHOT_COPY:<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        // do snapshot copy<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        LOG.debug("snapshot copy for " + backupId);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        snapshotCopy(backupInfo);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Updates incremental backup table set<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        backupManager.addIncrementalBackupTableSet(backupInfo.getTables());<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>        // BACKUP_COMPLETE:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        backupInfo.setState(BackupState.COMPLETE);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            backupManager.readLogTimestampMap();<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>        Long newStartCode =<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            BackupUtils.getMinValue(BackupUtils<a name="line.256"></a>
-<span class="sourceLineNo">257</span>                .getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        failStageIf(Stage.stage_4);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        // backup complete<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        completeBackup(conn, backupInfo, backupManager, BackupType.FULL, conf);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>      } catch (Exception e) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>        if(autoRestoreOnFailure) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          failBackup(conn, backupInfo, backupManager, e, "Unexpected BackupException : ",<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            BackupType.FULL, conf);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        throw new IOException(e);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<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>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @throws Exception if starting the mini cluster or setting up the tables fails<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  @Before<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public void setUp() throws Exception {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (setupIsDone) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    if (secure) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // set the always on security provider<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      UserProvider.setUserProviderForTesting(TEST_UTIL.getConfiguration(),<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          HadoopSecurityEnabledUserProviderForTesting.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      // setup configuration<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      SecureTestUtil.enableSecurity(TEST_UTIL.getConfiguration());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    conf1.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    BackupManager.decorateMasterConfiguration(conf1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    BackupManager.decorateRegionServerConfiguration(conf1);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    // Set TTL for old WALs to 1 sec to enforce fast cleaning of an archived<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    // WAL files<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    conf1.setLong(TimeToLiveLogCleaner.TTL_CONF_KEY, 1000);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    conf1.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, 1000);<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // Set MultiWAL (with 2 default WAL files per RS)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    conf1.set(WALFactory.WAL_PROVIDER, provider);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    TEST_UTIL.startMiniCluster();<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (useSecondCluster) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      conf2 = HBaseConfiguration.create(conf1);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      TEST_UTIL2 = new HBaseTestingUtility(conf2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      TEST_UTIL2.setZkCluster(TEST_UTIL.getZkCluster());<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      TEST_UTIL2.startMiniCluster();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    conf1 = TEST_UTIL.getConfiguration();<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    TEST_UTIL.startMiniMapReduceCluster();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    BACKUP_ROOT_DIR =<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        new Path(new Path(TEST_UTIL.getConfiguration().get("fs.defaultFS")),<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          BACKUP_ROOT_DIR).toString();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    LOG.info("ROOTDIR " + BACKUP_ROOT_DIR);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    if (useSecondCluster) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      BACKUP_REMOTE_ROOT_DIR =<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          new Path(new Path(TEST_UTIL2.getConfiguration().get("fs.defaultFS"))<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          + BACKUP_REMOTE_ROOT_DIR).toString();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      LOG.info("REMOTE ROOTDIR " + BACKUP_REMOTE_ROOT_DIR);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    createTables();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    populateFromMasterConfig(TEST_UTIL.getHBaseCluster().getMaster().getConfiguration(), conf1);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    setupIsDone = true;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  private static void populateFromMasterConfig(Configuration masterConf, Configuration conf) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    Iterator&lt;Entry&lt;String, String&gt;&gt; it = masterConf.iterator();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    while (it.hasNext()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      Entry&lt;String, String&gt; e = it.next();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      conf.set(e.getKey(), e.getValue());<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @throws Exception if deleting the archive directory or shutting down the mini cluster fails<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @AfterClass<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public static void tearDown() throws Exception {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    try{<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      SnapshotTestingUtils.deleteAllSnapshots(TEST_UTIL.getHBaseAdmin());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    } catch (Exception e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SnapshotTestingUtils.deleteArchiveDirectory(TEST_UTIL);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    if (useSecondCluster) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      TEST_UTIL2.shutdownMiniCluster();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    TEST_UTIL.shutdownMiniMapReduceCluster();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  HTable insertIntoTable(Connection conn, TableName table, byte[] family, int id, int numRows)<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    HTable t = (HTable) conn.getTable(table);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    Put p1;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    for (int i = 0; i &lt; numRows; i++) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      p1 = new Put(Bytes.toBytes("row-" + table + "-" + id + "-" + i));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      p1.addColumn(family, qualName, Bytes.toBytes("val" + i));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      t.put(p1);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    return t;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  protected BackupRequest createBackupRequest(BackupType type,<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      List&lt;TableName&gt; tables, String path) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    BackupRequest request = builder.withBackupType(type)<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                                    .withTableList(tables)<a name="line.368"></a>
-<span class="sourceLineNo">369</span>                                    .withTargetRootDir(path).build();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return request;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  protected String backupTables(BackupType type, List&lt;TableName&gt; tables, String path)<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Connection conn = null;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    BackupAdmin badmin = null;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    String backupId;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    try {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      conn = ConnectionFactory.createConnection(conf1);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      badmin = new BackupAdminImpl(conn);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      BackupRequest request = createBackupRequest(type, tables, path);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      backupId = badmin.backupTables(request);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    } finally {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (badmin != null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        badmin.close();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      if (conn != null) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        conn.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    return backupId;<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>  protected String fullTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return backupTables(BackupType.FULL, tables, BACKUP_ROOT_DIR);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  protected String incrementalTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return backupTables(BackupType.INCREMENTAL, tables, BACKUP_ROOT_DIR);<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>
-<span class="sourceLineNo">402</span>  protected static void loadTable(Table table) throws Exception {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Put p; // 100 + 1 row to t1_syncup<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    for (int i = 0; i &lt; NB_ROWS_IN_BATCH; i++) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      p = new Put(Bytes.toBytes("row" + i));<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      p.setDurability(Durability.SKIP_WAL);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      p.addColumn(famName, qualName, Bytes.toBytes("val" + i));<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      table.put(p);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  protected static void createTables() throws Exception {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    long tid = System.currentTimeMillis();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    table1 = TableName.valueOf("test-" + tid);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    HBaseAdmin ha = TEST_UTIL.getHBaseAdmin();<a name="line.415"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.AfterClass;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Before;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.Logger;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.slf4j.LoggerFactory;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * This class is only a base for other integration-level backup tests. Do not add tests here.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * TestBackupSmallTests is where tests that don't require bring machines up/down should go All other<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * tests should have their own classes and extend this one<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>public class TestBackupBase {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupBase.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected static HBaseTestingUtility TEST_UTIL2;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected static Configuration conf1 = TEST_UTIL.getConfiguration();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected static Configuration conf2;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected static TableName table1 = TableName.valueOf("table1");<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected static HTableDescriptor table1Desc;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected static TableName table2 = TableName.valueOf("table2");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected static TableName table3 = TableName.valueOf("table3");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected static TableName table4 = TableName.valueOf("table4");<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected static TableName table1_restore = TableName.valueOf("default:table1");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static TableName table2_restore = TableName.valueOf("ns2:table2");<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static TableName table3_restore = TableName.valueOf("ns3:table3_restore");<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static TableName table4_restore = TableName.valueOf("ns4:table4_restore");<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected static final int NB_ROWS_IN_BATCH = 99;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected static final byte[] qualName = Bytes.toBytes("q1");<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected static String BACKUP_ROOT_DIR = Path.SEPARATOR +"backupUT";<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  protected static String BACKUP_REMOTE_ROOT_DIR = Path.SEPARATOR + "backupUT";<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  protected static String provider = "defaultProvider";<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected static boolean secure = false;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  protected static boolean autoRestoreOnFailure = true;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected static boolean setupIsDone = false;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  protected static boolean useSecondCluster = false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  static class IncrementalTableBackupClientForTest extends IncrementalTableBackupClient {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public IncrementalTableBackupClientForTest() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    public IncrementalTableBackupClientForTest(Connection conn,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        String backupId, BackupRequest request) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      super(conn, backupId, request);<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 execute() throws IOException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      // case INCREMENTAL_COPY:<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        // case PREPARE_INCREMENTAL:<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        failStageIf(Stage.stage_0);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        beginBackup(backupManager, backupInfo);<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>        failStageIf(Stage.stage_1);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        backupInfo.setPhase(BackupPhase.PREPARE_INCREMENTAL);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        LOG.debug("For incremental backup, current table set is "<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            + backupManager.getIncrementalBackupTableSet());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        newTimestamps = ((IncrementalBackupManager) backupManager).getIncrBackupLogFileMap();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        // copy out the table and region info files for each table<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        BackupUtils.copyTableRegionInfo(conn, backupInfo, conf);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        // convert WAL to HFiles and copy them to .tmp under BACKUP_ROOT<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        convertWALsToHFiles();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        incrementalCopyHFiles(new String[] {getBulkOutputDir().toString()},<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          backupInfo.getBackupRootDir());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        failStageIf(Stage.stage_2);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // Save list of WAL files copied<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        backupManager.recordWALFiles(backupInfo.getIncrBackupFileList());<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>        // case INCR_BACKUP_COMPLETE:<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // Set the previousTimestampMap which is before this current log roll to the manifest.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; previousTimestampMap =<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            backupManager.readLogTimestampMap();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        backupInfo.setIncrTimestampMap(previousTimestampMap);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        failStageIf(Stage.stage_3);<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            backupManager.readLogTimestampMap();<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>        Long newStartCode =<a name="line.160"></a>
+<span class="sourceLineNo">161</span>            BackupUtils.getMinValue(BackupUtils.getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>        handleBulkLoad(backupInfo.getTableNames());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        failStageIf(Stage.stage_4);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>        // backup complete<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        completeBackup(conn, backupInfo, backupManager, BackupType.INCREMENTAL, conf);<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>      } catch (Exception e) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        failBackup(conn, backupInfo, backupManager, e, "Unexpected Exception : ",<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          BackupType.INCREMENTAL, conf);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        throw new IOException(e);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  static class FullTableBackupClientForTest extends FullTableBackupClient {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public FullTableBackupClientForTest() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    public FullTableBackupClientForTest(Connection conn, String backupId, BackupRequest request)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      super(conn, backupId, request);<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>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public void execute() throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Get the stage ID to fail on<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      try (Admin admin = conn.getAdmin()) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        // Begin BACKUP<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        beginBackup(backupManager, backupInfo);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        failStageIf(Stage.stage_0);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        String savedStartCode;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        boolean firstBackup;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        // do snapshot for full table backup<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        savedStartCode = backupManager.readBackupStartCode();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        firstBackup = savedStartCode == null || Long.parseLong(savedStartCode) == 0L;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        if (firstBackup) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          // This is our first backup. Let's put some marker to system table so that we can hold the<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          // logs while we do the backup.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          backupManager.writeBackupStartCode(0L);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        failStageIf(Stage.stage_1);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        // We roll log here before we do the snapshot. It is possible there is duplicate data<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        // in the log that is already in the snapshot. But if we do it after the snapshot, we<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        // could have data loss.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        // A better approach is to do the roll log on each RS in the same global procedure as<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // the snapshot.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("Execute roll log procedure for full backup ...");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        Map&lt;String, String&gt; props = new HashMap&lt;&gt;();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        props.put("backupRoot", backupInfo.getBackupRootDir());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        admin.execProcedure(LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_SIGNATURE,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_NAME, props);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        failStageIf(Stage.stage_2);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        newTimestamps = backupManager.readRegionServerLastLogRollResult();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (firstBackup) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          // Updates registered log files<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          // We record ALL old WAL files as registered, because<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          // this is a first full backup in the system and these<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          // files are not needed for next incremental backup<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          List&lt;String&gt; logFiles = BackupUtils.getWALFilesOlderThan(conf, newTimestamps);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          backupManager.recordWALFiles(logFiles);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // SNAPSHOT_TABLES:<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        backupInfo.setPhase(BackupPhase.SNAPSHOT);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        for (TableName tableName : tableList) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          String snapshotName =<a name="line.230"></a>
+<span class="sourceLineNo">231</span>              "snapshot_" + Long.toString(EnvironmentEdgeManager.currentTime()) + "_"<a name="line.231"></a>
+<span class="sourceLineNo">232</span>                  + tableName.getNamespaceAsString() + "_" + tableName.getQualifierAsString();<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>          snapshotTable(admin, tableName, snapshotName);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          backupInfo.setSnapshotName(tableName, snapshotName);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        failStageIf(Stage.stage_3);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        // SNAPSHOT_COPY:<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        // do snapshot copy<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        LOG.debug("snapshot copy for " + backupId);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        snapshotCopy(backupInfo);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        // Updates incremental backup table set<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        backupManager.addIncrementalBackupTableSet(backupInfo.getTables());<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>        // BACKUP_COMPLETE:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        backupInfo.setState(BackupState.COMPLETE);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            backupManager.readLogTimestampMap();<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>        Long newStartCode =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>            BackupUtils.getMinValue(BackupUtils<a name="line.257"></a>
+<span class="sourceLineNo">258</span>                .getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        failStageIf(Stage.stage_4);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        // backup complete<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        completeBackup(conn, backupInfo, backupManager, BackupType.FULL, conf);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } catch (Exception e) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>        if(autoRestoreOnFailure) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          failBackup(conn, backupInfo, backupManager, e, "Unexpected BackupException : ",<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            BackupType.FULL, conf);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        throw new IOException(e);<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>
+<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  /**<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @throws Exception if starting the mini cluster or setting up the tables fails<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Before<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void setUp() throws Exception {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    if (setupIsDone) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (secure) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      // set the always on security provider<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      UserProvider.setUserProviderForTesting(TEST_UTIL.getConfiguration(),<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          HadoopSecurityEnabledUserProviderForTesting.class);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // setup configuration<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      SecureTestUtil.enableSecurity(TEST_UTIL.getConfiguration());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    conf1.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    BackupManager.decorateMasterConfiguration(conf1);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    BackupManager.decorateRegionServerConfiguration(conf1);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    // Set TTL for old WALs to 1 sec to enforce fast cleaning of an archived<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    // WAL files<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    conf1.setLong(TimeToLiveLogCleaner.TTL_CONF_KEY, 1000);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    conf1.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, 1000);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // Set MultiWAL (with 2 default WAL files per RS)<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    conf1.set(WALFactory.WAL_PROVIDER, provider);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    TEST_UTIL.startMiniCluster();<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    if (useSecondCluster) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      conf2 = HBaseConfiguration.create(conf1);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      TEST_UTIL2 = new HBaseTestingUtility(conf2);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      TEST_UTIL2.setZkCluster(TEST_UTIL.getZkCluster());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      TEST_UTIL2.startMiniDFSCluster(3);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      String root2 = TEST_UTIL2.getConfiguration().get("fs.defaultFS");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      Path p = new Path(new Path(root2), "/tmp/wal");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      CommonFSUtils.setWALRootDir(TEST_UTIL2.getConfiguration(), p);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      TEST_UTIL2.startMiniCluster();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    conf1 = TEST_UTIL.getConfiguration();<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>    TEST_UTIL.startMiniMapReduceCluster();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    BACKUP_ROOT_DIR =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        new Path(new Path(TEST_UTIL.getConfiguration().get("fs.defaultFS")),<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          BACKUP_ROOT_DIR).toString();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    LOG.info("ROOTDIR " + BACKUP_ROOT_DIR);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    if (useSecondCluster) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      BACKUP_REMOTE_ROOT_DIR =<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          new Path(new Path(TEST_UTIL2.getConfiguration().get("fs.defaultFS"))<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          + BACKUP_REMOTE_ROOT_DIR).toString();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      LOG.info("REMOTE ROOTDIR " + BACKUP_REMOTE_ROOT_DIR);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    createTables();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    populateFromMasterConfig(TEST_UTIL.getHBaseCluster().getMaster().getConfiguration(), conf1);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    setupIsDone = true;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private static void populateFromMasterConfig(Configuration masterConf, Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Iterator&lt;Entry&lt;String, String&gt;&gt; it = masterConf.iterator();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    while (it.hasNext()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      Entry&lt;String, String&gt; e = it.next();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      conf.set(e.getKey(), e.getValue());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @throws Exception if deleting the archive directory or shutting down the mini cluster fails<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @AfterClass<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public static void tearDown() throws Exception {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    try{<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      SnapshotTestingUtils.deleteAllSnapshots(TEST_UTIL.getHBaseAdmin());<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    } catch (Exception e) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    SnapshotTestingUtils.deleteArchiveDirectory(TEST_UTIL);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (useSecondCluster) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      TEST_UTIL2.shutdownMiniCluster();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    TEST_UTIL.shutdownMiniMapReduceCluster();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  HTable insertIntoTable(Connection conn, TableName table, byte[] family, int id, int numRows)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      throws IOException {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    HTable t = (HTable) conn.getTable(table);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Put p1;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (int i = 0; i &lt; numRows; i++) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      p1 = new Put(Bytes.toBytes("row-" + table + "-" + id + "-" + i));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      p1.addColumn(family, qualName, Bytes.toBytes("val" + i));<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      t.put(p1);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return t;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  protected BackupRequest createBackupRequest(BackupType type,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      List&lt;TableName&gt; tables, String path) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    BackupRequest request = builder.withBackupType(type)<a name="line.372"></a>
+<span class="sourceLineNo">373</span>                                    .withTableList(tables)<a name="line.373"></a>
+<span class="sourceLineNo">374</span>                                    .withTargetRootDir(path).build();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return request;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  protected String backupTables(BackupType type, List&lt;TableName&gt; tables, String path)<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    Connection conn = null;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    BackupAdmin badmin = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String backupId;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    try {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      conn = ConnectionFactory.createConnection(conf1);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      badmin = new BackupAdminImpl(conn);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      BackupRequest request = createBackupRequest(type, tables, path);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      backupId = badmin.backupTables(request);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    } finally {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      if (badmin != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        badmin.close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      if (conn != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        conn.close();<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>    return backupId;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected String fullTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return backupTables(BackupType.FULL, tables, BACKUP_ROOT_DIR);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  protected String incrementalTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    return backupTables(BackupType.INCREMENTAL, tables, BACKUP_ROOT_DIR);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  protected static void loadTable(Table table) throws Exception {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Put p; // 100 + 1 row to t1_syncup<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    for (int i = 0; i &lt; NB_ROWS_IN_BATCH; i++) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      p = new Put(Bytes.toBytes("row" + i));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      p.setDurability(Durability.SKIP_WAL);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      p.addColumn(famName, qualName, Bytes.toBytes("val" + i));<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      table.put(p);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
 <span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // Create namespaces<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    NamespaceDescriptor desc1 = NamespaceDescriptor.create("ns1").build();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    NamespaceDescriptor desc2 = NamespaceDescriptor.create("ns2").build();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    NamespaceDescriptor desc3 = NamespaceDescriptor.create("ns3").build();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    NamespaceDescriptor desc4 = NamespaceDescriptor.create("ns4").build();<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    ha.createNamespace(desc1);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    ha.createNamespace(desc2);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    ha.createNamespace(desc3);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ha.createNamespace(desc4);<a name="line.426"></a>
+<span class="sourceLineNo">417</span>  protected static void createTables() throws Exception {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    long tid = System.currentTimeMillis();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    table1 = TableName.valueOf("test-" + tid);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HBaseAdmin ha = TEST_UTIL.getHBaseAdmin();<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>    // Create namespaces<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    NamespaceDescriptor desc1 = NamespaceDescriptor.create("ns1").build();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    NamespaceDescriptor desc2 = NamespaceDescriptor.create("ns2").build();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    NamespaceDescriptor desc3 = NamespaceDescriptor.create("ns3").build();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    NamespaceDescriptor desc4 = NamespaceDescriptor.create("ns4").build();<a name="line.426"></a>
 <span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    HTableDescriptor desc = new HTableDescriptor(table1);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    desc.addFamily(fam);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    ha.createTable(desc);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    table1Desc = desc;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Connection conn = ConnectionFactory.createConnection(conf1);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Table table = conn.getTable(table1);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    loadTable(table);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    table.close();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    table2 = TableName.valueOf("ns2:test-" + tid + 1);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    desc = new HTableDescriptor(table2);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    desc.addFamily(fam);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ha.createTable(desc);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    table = conn.getTable(table2);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    loadTable(table);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    table.close();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    table3 = TableName.valueOf("ns3:test-" + tid + 2);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    table = TEST_UTIL.createTable(table3, famName);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    table.close();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    table4 = TableName.valueOf("ns4:test-" + tid + 3);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    table = TEST_UTIL.createTable(table4, famName);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    table.close();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    ha.close();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    conn.close();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  protected boolean checkSucceeded(String backupId) throws IOException {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (status == null) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      return false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    return status.getState() == BackupState.COMPLETE;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  protected boolean checkFailed(String backupId) throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    if (status == null) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    return status.getState() == BackupState.FAILED;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>  private BackupInfo getBackupInfo(String backupId) throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    try (BackupSystemTable table = new BackupSystemTable(TEST_UTIL.getConnection())) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      BackupInfo status = table.readBackupInfo(backupId);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return status;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  protected BackupAdmin getBackupAdmin() throws IOException {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    return new BackupAdminImpl(TEST_UTIL.getConnection());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Helper method<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  protected List&lt;TableName&gt; toList(String... args) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    List&lt;TableName&gt; ret = new ArrayList&lt;&gt;();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      ret.add(TableName.valueOf(args[i]));<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    return ret;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  protected void dumpBackupDir() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    // Dump Backup Dir<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    FileSystem fs = FileSystem.get(conf1);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(new Path(BACKUP_ROOT_DIR), true);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    while (it.hasNext()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      LOG.debug(Objects.toString(it.next().getPath()));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>}<a name="line.504"></a>
+<span class="sourceLineNo">428</span>    ha.createNamespace(desc1);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    ha.createNamespace(desc2);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    ha.createNamespace(desc3);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    ha.createNamespace(desc4);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HTableDescriptor desc = new HTableDescriptor(table1);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    desc.addFamily(fam);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    ha.createTable(desc);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    table1Desc = desc;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    Connection conn = ConnectionFactory.createConnection(conf1);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    Table table = conn.getTable(table1);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    loadTable(table);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    table.close();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    table2 = TableName.valueOf("ns2:test-" + tid + 1);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    desc = new HTableDescriptor(table2);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    desc.addFamily(fam);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    ha.createTable(desc);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    table = conn.getTable(table2);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    loadTable(table);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    table.close();<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    table3 = TableName.valueOf("ns3:test-" + tid + 2);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    table = TEST_UTIL.createTable(table3, famName);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    table.close();<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    table4 = TableName.valueOf("ns4:test-" + tid + 3);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    table = TEST_UTIL.createTable(table4, famName);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    table.close();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    ha.close();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    conn.close();<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  protected boolean checkSucceeded(String backupId) throws IOException {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    if (status == null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      return false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return status.getState() == BackupState.COMPLETE;<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  protected boolean checkFailed(String backupId) throws IOException {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (status == null) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return status.getState() == BackupState.FAILED;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private BackupInfo getBackupInfo(String backupId) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    try (BackupSystemTable table = new BackupSystemTable(TEST_UTIL.getConnection())) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      BackupInfo status = table.readBackupInfo(backupId);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      return status;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
+<span class="sourceLineNo">485</span><a name="line.485"></a>
+<span class="sourceLineNo">486</span>  protected BackupAdmin getBackupAdmin() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    return new BackupAdminImpl(TEST_UTIL.getConnection());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * Helper method<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   */<a name="line.492"></a>
+<span class="sourceLineNo">493</span>  protected List&lt;TableName&gt; toList(String... args) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    List&lt;TableName&gt; ret = new ArrayList&lt;&gt;();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      ret.add(TableName.valueOf(args[i]));<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    return ret;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>  protected void dumpBackupDir() throws IOException {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    // Dump Backup Dir<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    FileSystem fs = FileSystem.get(conf1);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(new Path(BACKUP_ROOT_DIR), true);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    while (it.hasNext()) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.debug(Objects.toString(it.next().getPath()));<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span>}<a name="line.509"></a>
 
 
 


[09/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[03/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
index 6d4122b..bd1a182 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html
@@ -269,12 +269,12 @@
 <span class="sourceLineNo">261</span><a name="line.261"></a>
 <span class="sourceLineNo">262</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.262"></a>
 <span class="sourceLineNo">263</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      final TransitionCode state) throws IOException {<a name="line.264"></a>
+<span class="sourceLineNo">264</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.264"></a>
 <span class="sourceLineNo">265</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.265"></a>
 <span class="sourceLineNo">266</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.266"></a>
 <span class="sourceLineNo">267</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.267"></a>
 <span class="sourceLineNo">268</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(1).build());<a name="line.269"></a>
+<span class="sourceLineNo">269</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.269"></a>
 <span class="sourceLineNo">270</span>    am.reportRegionStateTransition(req.build());<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>
@@ -294,304 +294,307 @@
 <span class="sourceLineNo">286</span>    @Override<a name="line.286"></a>
 <span class="sourceLineNo">287</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.287"></a>
 <span class="sourceLineNo">288</span>        throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      // Concurrency?<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (regions == null) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        regionsToRegionServers.put(server, regions);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      if (regions.contains(hri.getRegionName())) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.299"></a>
+<span class="sourceLineNo">289</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      long previousOpenSeqNum =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        previousOpenSeqNum + 2);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // Concurrency?<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      if (regions == null) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>        regionsToRegionServers.put(server, regions);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>      }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      regions.add(hri.getRegionName());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      return RegionOpeningState.OPENED;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    private final IOException exception;<a name="line.323"></a>
+<span class="sourceLineNo">301</span>      if (regions.contains(hri.getRegionName())) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      regions.add(hri.getRegionName());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      return RegionOpeningState.OPENED;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throws IOException {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      throw new ServerNotRunningYetException("wait on server startup");<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.exception = exception;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    @Override<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        throws IOException {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      throw exception;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final int maxSocketTimeoutRetries;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final int maxServerRetries;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    private ServerName lastServer;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    private int sockTimeoutRetries;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    private int serverRetries;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      this.maxServerRetries = maxServerRetries;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        throws IOException {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // SocketTimeoutException should be a temporary problem<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      // unless the server will be declared dead.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (sockTimeoutRetries == 1) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          assertNotEquals(lastServer, server);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        lastServer = server;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        sockTimeoutRetries = 0;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      } else {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        return super.sendRequest(server, req);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  /**<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private int invocations;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    @Override<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      if (this.invocations++ &gt; 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // Return w/o problem the second time through here.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        return super.execOpenRegion(server, openReq);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // from the RS in this case.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      executor.schedule(new Runnable() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        @Override<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        public void run() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          LOG.info("Sending in CRASH of " + server);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          doCrash(server);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      }, 1, TimeUnit.SECONDS);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<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">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * RS crashed when SCP is not enabled.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    private int invocations;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      if (this.invocations++ &gt; 0) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // Return w/o problem the second time through here.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        return super.execOpenRegion(server, openReq);<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      // from the RS in this case.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      executor.schedule(new Runnable() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        public void run() {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          LOG.info("Restarting RS of " + server);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          doRestart(server);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      }, 1, TimeUnit.SECONDS);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private int invocations;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        throws IOException {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      switch (this.invocations++) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        case 0:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          throw new NotServingRegionException("Fake");<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        case 1:<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          executor.schedule(new Runnable() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>            @Override<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            public void run() {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>              LOG.info("Sending in CRASH of " + server);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>              doCrash(server);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>            }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>          }, 1, TimeUnit.SECONDS);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          throw new RegionServerAbortedException("Fake!");<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        case 2:<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          executor.schedule(new Runnable() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>            public void run() {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>              LOG.info("Sending in CRASH of " + server);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>              doCrash(server);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>            }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>          }, 1, TimeUnit.SECONDS);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          throw new RegionServerStoppedException("Fake!");<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        case 3:<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        case 4:<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>          executor.schedule(new Runnable() {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>            @Override<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            public void run() {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              LOG.info("Sending in CRASH of " + server);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              doCrash(server);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>            }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          }, 1, TimeUnit.SECONDS);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          return null;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        default:<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          return super.execCloseRegion(server, regionName);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    private final Random rand = new Random();<a name="line.479"></a>
+<span class="sourceLineNo">325</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    private final IOException exception;<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.exception = exception;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    @Override<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        throws IOException {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      throw exception;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final int maxSocketTimeoutRetries;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    private final int maxServerRetries;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private ServerName lastServer;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    private int sockTimeoutRetries;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    private int serverRetries;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      this.maxServerRetries = maxServerRetries;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    @Override<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        throws IOException {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // SocketTimeoutException should be a temporary problem<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      // unless the server will be declared dead.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (sockTimeoutRetries == 1) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          assertNotEquals(lastServer, server);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        lastServer = server;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        sockTimeoutRetries = 0;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        return super.sendRequest(server, req);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * server after a few seconds; crash is supposed to take care of the suspended procedures.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  protected class HangThenRSCrashExecutor extends GoodRsExecutor {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    private int invocations;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        throws IOException {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (this.invocations++ &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        // Return w/o problem the second time through here.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return super.execOpenRegion(server, openReq);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // from the RS in this case.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      executor.schedule(new Runnable() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        public void run() {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          LOG.info("Sending in CRASH of " + server);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          doCrash(server);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }, 1, TimeUnit.SECONDS);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      return null;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  /**<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * Takes open request and then returns nothing so acts like a RS that went zombie. No response (so<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * proc is stuck/suspended on the Master and won't wake up.). Different with<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * HangThenRSCrashExecutor, HangThenRSCrashExecutor will create ServerCrashProcedure to handle the<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   * server crash. However, this HangThenRSRestartExecutor will restart RS directly, situation for<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * RS crashed when SCP is not enabled.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   */<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  protected class HangThenRSRestartExecutor extends GoodRsExecutor {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    private int invocations;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throws IOException {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      if (this.invocations++ &gt; 0) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // Return w/o problem the second time through here.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        return super.execOpenRegion(server, openReq);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      // from the RS in this case.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      LOG.info("Return null response from serverName=" + server + "; means STUCK...TODO timeout");<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      executor.schedule(new Runnable() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        public void run() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.info("Restarting RS of " + server);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          doRestart(server);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      }, 1, TimeUnit.SECONDS);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      return null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  protected class HangOnCloseThenRSCrashExecutor extends GoodRsExecutor {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    public static final int TYPES_OF_FAILURE = 6;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private int invocations;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>    @Override<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      switch (this.invocations++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        case 0:<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          throw new NotServingRegionException("Fake");<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        case 1:<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          executor.schedule(new Runnable() {<a name="line.446"></a>
+<span class="sourceLineNo">447</span>            @Override<a name="line.447"></a>
+<span class="sourceLineNo">448</span>            public void run() {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              LOG.info("Sending in CRASH of " + server);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>              doCrash(server);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>            }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          }, 1, TimeUnit.SECONDS);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          throw new RegionServerAbortedException("Fake!");<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        case 2:<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          executor.schedule(new Runnable() {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>            @Override<a name="line.456"></a>
+<span class="sourceLineNo">457</span>            public void run() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>              LOG.info("Sending in CRASH of " + server);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>              doCrash(server);<a name="line.459"></a>
+<span class="sourceLineNo">460</span>            }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          }, 1, TimeUnit.SECONDS);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          throw new RegionServerStoppedException("Fake!");<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        case 3:<a name="line.463"></a>
+<span class="sourceLineNo">464</span>          throw new ServerNotRunningYetException("Fake!");<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        case 4:<a name="line.465"></a>
+<span class="sourceLineNo">466</span>          LOG.info("Returned null from serverName={}; means STUCK...TODO timeout", server);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>          executor.schedule(new Runnable() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>            @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>            public void run() {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              LOG.info("Sending in CRASH of " + server);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>              doCrash(server);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>            }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>          }, 1, TimeUnit.SECONDS);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>          return null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        default:<a name="line.475"></a>
+<span class="sourceLineNo">476</span>          return super.execCloseRegion(server, regionName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
 <span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>    @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        throws IOException {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      switch (rand.nextInt(5)) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        case 0:<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        case 1:<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        case 2:<a name="line.489"></a>
-<span class="sourceLineNo">490</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        default:<a name="line.491"></a>
-<span class="sourceLineNo">492</span>          // fall out<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      return super.sendRequest(server, req);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    @Override<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        throws IOException {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      switch (rand.nextInt(6)) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        case 0:<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          LOG.info("Return OPENED response");<a name="line.502"></a>
-<span class="sourceLineNo">503</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        case 1:<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          LOG.info("Return transition report that OPENED/ALREADY_OPENED response");<a name="line.506"></a>
-<span class="sourceLineNo">507</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          return OpenRegionResponse.RegionOpeningState.ALREADY_OPENED;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        case 2:<a name="line.509"></a>
-<span class="sourceLineNo">510</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.510"></a>
-<span class="sourceLineNo">511</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>        default:<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          // fall out<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      // from the RS in this case.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        " a few seconds...");<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      executor.schedule(new Runnable() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        @Override<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        public void run() {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          doCrash(server);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      }, 5, TimeUnit.SECONDS);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      return null;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>    @Override<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      boolean closed = rand.nextBoolean();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (closed) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      resp.setClosed(closed);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return resp.build();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  protected interface MockRSExecutor {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        throws IOException;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    private MockRSExecutor mockRsExec;<a name="line.550"></a>
+<span class="sourceLineNo">481</span>  protected class RandRsExecutor extends NoopRsExecutor {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    private final Random rand = new Random();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      switch (rand.nextInt(5)) {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        case 0:<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          throw new ServerNotRunningYetException("wait on server startup");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        case 1:<a name="line.490"></a>
+<span class="sourceLineNo">491</span>          throw new SocketTimeoutException("simulate socket timeout");<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        case 2:<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          throw new RemoteException("java.io.IOException", "unexpected exception");<a name="line.493"></a>
+<span class="sourceLineNo">494</span>        default:<a name="line.494"></a>
+<span class="sourceLineNo">495</span>          // fall out<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      return super.sendRequest(server, req);<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    protected RegionOpeningState execOpenRegion(final ServerName server, RegionOpenInfo openReq)<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        throws IOException {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      long previousOpenSeqNum =<a name="line.504"></a>
+<span class="sourceLineNo">505</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      switch (rand.nextInt(3)) {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        case 0:<a name="line.507"></a>
+<span class="sourceLineNo">508</span>          LOG.info("Return OPENED response");<a name="line.508"></a>
+<span class="sourceLineNo">509</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.509"></a>
+<span class="sourceLineNo">510</span>            previousOpenSeqNum + 2);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          return OpenRegionResponse.RegionOpeningState.OPENED;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>        case 1:<a name="line.512"></a>
+<span class="sourceLineNo">513</span>          LOG.info("Return transition report that FAILED_OPEN/FAILED_OPENING response");<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          sendTransitionReport(server, openReq.getRegion(), TransitionCode.FAILED_OPEN, -1);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>          return OpenRegionResponse.RegionOpeningState.FAILED_OPENING;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        default:<a name="line.516"></a>
+<span class="sourceLineNo">517</span>          // fall out<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      // The procedure on master will just hang forever because nothing comes back<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      // from the RS in this case.<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      LOG.info("Return null as response; means proc stuck so we send in a crash report after" +<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        " a few seconds...");<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      executor.schedule(new Runnable() {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>        public void run() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>          LOG.info("Delayed CRASHING of " + server);<a name="line.526"></a>
+<span class="sourceLineNo">527</span>          doCrash(server);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      }, 5, TimeUnit.SECONDS);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>      return null;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        throws IOException {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      CloseRegionResponse.Builder resp = CloseRegionResponse.newBuilder();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      boolean closed = rand.nextBoolean();<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      if (closed) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        RegionInfo hri = am.getRegionInfo(regionName);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      resp.setClosed(closed);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return resp.build();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  protected interface MockRSExecutor {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        throws IOException;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
 <span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      super(master);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      this.mockRsExec = mockRsExec;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    protected void remoteDispatch(ServerName serverName,<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      public MockRemoteCall(final ServerName serverName,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        super(serverName, operations);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    }<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected void collectAssignmentManagerMetrics() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
-<span class="sourceLineNo">586</span>}<a name="line.586"></a>
+<span class="sourceLineNo">552</span>  protected class MockRSProcedureDispatcher extends RSProcedureDispatcher {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    private MockRSExecutor mockRsExec;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    public MockRSProcedureDispatcher(final MasterServices master) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      super(master);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    public void setMockRsExecutor(final MockRSExecutor mockRsExec) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      this.mockRsExec = mockRsExec;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    protected void remoteDispatch(ServerName serverName,<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        @SuppressWarnings("rawtypes") Set&lt;RemoteProcedure&gt; remoteProcedures) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      submitTask(new MockRemoteCall(serverName, remoteProcedures));<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
+<span class="sourceLineNo">568</span><a name="line.568"></a>
+<span class="sourceLineNo">569</span>    private class MockRemoteCall extends ExecuteProceduresRemoteCall {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      public MockRemoteCall(final ServerName serverName,<a name="line.570"></a>
+<span class="sourceLineNo">571</span>          @SuppressWarnings("rawtypes") final Set&lt;RemoteProcedure&gt; operations) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        super(serverName, operations);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>      @Override<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      protected ExecuteProceduresResponse sendRequest(final ServerName serverName,<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          final ExecuteProceduresRequest request) throws IOException {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return mockRsExec.sendRequest(serverName, request);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  protected void collectAssignmentManagerMetrics() {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    assignSubmittedCount = assignProcMetrics.getSubmittedCounter().getCount();<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    assignFailedCount = assignProcMetrics.getFailedCounter().getCount();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    unassignSubmittedCount = unassignProcMetrics.getSubmittedCounter().getCount();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    unassignFailedCount = unassignProcMetrics.getFailedCounter().getCount();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span>}<a name="line.589"></a>
 
 
 


[20/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.html b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.html
index cf9cbba..2c990d8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupBase.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.79">TestBackupBase</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.80">TestBackupBase</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This class is only a base for other integration-level backup tests. Do not add tests here.
  TestBackupSmallTests is where tests that don't require bring machines up/down should go All other
@@ -390,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.80">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.81">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -399,7 +399,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.82">TEST_UTIL</a></pre>
+<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.83">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL2">
@@ -408,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL2</h4>
-<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.83">TEST_UTIL2</a></pre>
+<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.84">TEST_UTIL2</a></pre>
 </li>
 </ul>
 <a name="conf1">
@@ -417,7 +417,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf1</h4>
-<pre>protected static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.84">conf1</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.85">conf1</a></pre>
 </li>
 </ul>
 <a name="conf2">
@@ -426,7 +426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf2</h4>
-<pre>protected static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.85">conf2</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.86">conf2</a></pre>
 </li>
 </ul>
 <a name="table1">
@@ -435,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table1</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.87">table1</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.88">table1</a></pre>
 </li>
 </ul>
 <a name="table1Desc">
@@ -444,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table1Desc</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.88">table1Desc</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.HTableDescriptor <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.89">table1Desc</a></pre>
 </li>
 </ul>
 <a name="table2">
@@ -453,7 +453,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table2</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.89">table2</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.90">table2</a></pre>
 </li>
 </ul>
 <a name="table3">
@@ -462,7 +462,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table3</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.90">table3</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.91">table3</a></pre>
 </li>
 </ul>
 <a name="table4">
@@ -471,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table4</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.91">table4</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.92">table4</a></pre>
 </li>
 </ul>
 <a name="table1_restore">
@@ -480,7 +480,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table1_restore</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.93">table1_restore</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.94">table1_restore</a></pre>
 </li>
 </ul>
 <a name="table2_restore">
@@ -489,7 +489,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table2_restore</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.94">table2_restore</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.95">table2_restore</a></pre>
 </li>
 </ul>
 <a name="table3_restore">
@@ -498,7 +498,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table3_restore</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.95">table3_restore</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.96">table3_restore</a></pre>
 </li>
 </ul>
 <a name="table4_restore">
@@ -507,7 +507,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>table4_restore</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.96">table4_restore</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.97">table4_restore</a></pre>
 </li>
 </ul>
 <a name="NB_ROWS_IN_BATCH">
@@ -516,7 +516,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NB_ROWS_IN_BATCH</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.98">NB_ROWS_IN_BATCH</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.99">NB_ROWS_IN_BATCH</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.backup.TestBackupBase.NB_ROWS_IN_BATCH">Constant Field Values</a></dd>
@@ -529,7 +529,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>qualName</h4>
-<pre>protected static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.99">qualName</a></pre>
+<pre>protected static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.100">qualName</a></pre>
 </li>
 </ul>
 <a name="famName">
@@ -538,7 +538,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>famName</h4>
-<pre>protected static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.100">famName</a></pre>
+<pre>protected static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.101">famName</a></pre>
 </li>
 </ul>
 <a name="BACKUP_ROOT_DIR">
@@ -547,7 +547,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>BACKUP_ROOT_DIR</h4>
-<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.102">BACKUP_ROOT_DIR</a></pre>
+<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.103">BACKUP_ROOT_DIR</a></pre>
 </li>
 </ul>
 <a name="BACKUP_REMOTE_ROOT_DIR">
@@ -556,7 +556,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>BACKUP_REMOTE_ROOT_DIR</h4>
-<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.103">BACKUP_REMOTE_ROOT_DIR</a></pre>
+<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.104">BACKUP_REMOTE_ROOT_DIR</a></pre>
 </li>
 </ul>
 <a name="provider">
@@ -565,7 +565,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>provider</h4>
-<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.104">provider</a></pre>
+<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.105">provider</a></pre>
 </li>
 </ul>
 <a name="secure">
@@ -574,7 +574,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>secure</h4>
-<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.105">secure</a></pre>
+<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.106">secure</a></pre>
 </li>
 </ul>
 <a name="autoRestoreOnFailure">
@@ -583,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>autoRestoreOnFailure</h4>
-<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.107">autoRestoreOnFailure</a></pre>
+<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.108">autoRestoreOnFailure</a></pre>
 </li>
 </ul>
 <a name="setupIsDone">
@@ -592,7 +592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupIsDone</h4>
-<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.108">setupIsDone</a></pre>
+<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.109">setupIsDone</a></pre>
 </li>
 </ul>
 <a name="useSecondCluster">
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>useSecondCluster</h4>
-<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.109">useSecondCluster</a></pre>
+<pre>protected static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.110">useSecondCluster</a></pre>
 </li>
 </ul>
 </li>
@@ -618,7 +618,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBackupBase</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.79">TestBackupBase</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.80">TestBackupBase</a>()</pre>
 </li>
 </ul>
 </li>
@@ -635,7 +635,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.278">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.279">setUp</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -649,7 +649,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>populateFromMasterConfig</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.327">populateFromMasterConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;masterConf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.332">populateFromMasterConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;masterConf,
                                              org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
@@ -659,7 +659,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.339">tearDown</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.344">tearDown</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -673,7 +673,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>insertIntoTable</h4>
-<pre>org.apache.hadoop.hbase.client.HTable&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.352">insertIntoTable</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>org.apache.hadoop.hbase.client.HTable&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.357">insertIntoTable</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                                                       org.apache.hadoop.hbase.TableName&nbsp;table,
                                                       byte[]&nbsp;family,
                                                       int&nbsp;id,
@@ -691,7 +691,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createBackupRequest</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.backup.BackupRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.364">createBackupRequest</a>(org.apache.hadoop.hbase.backup.BackupType&nbsp;type,
+<pre>protected&nbsp;org.apache.hadoop.hbase.backup.BackupRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.369">createBackupRequest</a>(org.apache.hadoop.hbase.backup.BackupType&nbsp;type,
                                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;tables,
                                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 </li>
@@ -702,7 +702,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>backupTables</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.373">backupTables</a>(org.apache.hadoop.hbase.backup.BackupType&nbsp;type,
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.378">backupTables</a>(org.apache.hadoop.hbase.backup.BackupType&nbsp;type,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;tables,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -718,7 +718,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>fullTableBackup</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.394">fullTableBackup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;tables)
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.399">fullTableBackup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;tables)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -732,7 +732,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementalTableBackup</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.398">incrementalTableBackup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;tables)
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.403">incrementalTableBackup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;tables)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -746,7 +746,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTable</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.402">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.407">loadTable</a>(org.apache.hadoop.hbase.client.Table&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -760,7 +760,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createTables</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.412">createTables</a>()
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.417">createTables</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -774,7 +774,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSucceeded</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.454">checkSucceeded</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.459">checkSucceeded</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -788,7 +788,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFailed</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.464">checkFailed</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.469">checkFailed</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -802,7 +802,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupInfo</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.backup.BackupInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.474">getBackupInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)
+<pre>private&nbsp;org.apache.hadoop.hbase.backup.BackupInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.479">getBackupInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;backupId)
                                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -816,7 +816,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupAdmin</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.backup.BackupAdmin&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.481">getBackupAdmin</a>()
+<pre>protected&nbsp;org.apache.hadoop.hbase.backup.BackupAdmin&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.486">getBackupAdmin</a>()
                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -830,7 +830,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toList</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.488">toList</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.TableName&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.493">toList</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)</pre>
 <div class="block">Helper method</div>
 </li>
 </ul>
@@ -840,7 +840,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>dumpBackupDir</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.496">dumpBackupDir</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupBase.html#line.501">dumpBackupDir</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 6af42fe..2d9b60f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -146,8 +146,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index fe6fc0d..7da9d77 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -3559,6 +3559,10 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestReportRegionStateTransitionRetry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index b811de6..09082c5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -2287,6 +2287,10 @@
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestReportRegionStateTransitionRetry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index ec56445..4837d80 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html
index b0bc7e2..1591253 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMAssignWithRandExec.html
@@ -206,7 +206,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#bulkSubmit-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure:A-">bulkSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#collectAssignmentManagerMetrics--">collectAssignmentManagerMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAndSubmitAssign-org.apache.hadoop.hbase.TableName-int-">createAndSubmitAssign</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createRegionInfo-org.apache.hadoop.hbase.TableName-long-">createRegionInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/maste
 r/assignment/TestAssignmentManagerBase.html#createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createUnassignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doCrash-org.apache.hadoop.hbase.ServerName-">doCrash</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doRestart-org.apache.hadoop.hbase.ServerName-">doRestart</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#getAssignMaxAttempts--">getAssignMaxAttempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">sendTransitionReport</a>, <a href="../../..
 /../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUpMeta--">setUpMeta</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#waitOnFuture-java.util.concurrent.Future-">waitOnFuture</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#bulkSubmit-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure:A-">bulkSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#collectAssignmentManagerMetrics--">collectAssignmentManagerMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAndSubmitAssign-org.apache.hadoop.hbase.TableName-int-">createAndSubmitAssign</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createRegionInfo-org.apache.hadoop.hbase.TableName-long-">createRegionInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/maste
 r/assignment/TestAssignmentManagerBase.html#createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createUnassignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doCrash-org.apache.hadoop.hbase.ServerName-">doCrash</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doRestart-org.apache.hadoop.hbase.ServerName-">doRestart</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#getAssignMaxAttempts--">getAssignMaxAttempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">sendTransitionReport</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUpMeta--">setUpMeta</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#waitOnFuture-java.util.concurrent.Future-">waitOnFuture</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.html
index 70ba4c6..7091b38 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAMServerFailedOpen.html
@@ -228,7 +228,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#bulkSubmit-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure:A-">bulkSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#collectAssignmentManagerMetrics--">collectAssignmentManagerMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAndSubmitAssign-org.apache.hadoop.hbase.TableName-int-">createAndSubmitAssign</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createRegionInfo-org.apache.hadoop.hbase.TableName-long-">createRegionInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/maste
 r/assignment/TestAssignmentManagerBase.html#createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createUnassignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doCrash-org.apache.hadoop.hbase.ServerName-">doCrash</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doRestart-org.apache.hadoop.hbase.ServerName-">doRestart</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">sendTransitionReport</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hb
 ase/master/assignment/TestAssignmentManagerBase.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUpMeta--">setUpMeta</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#waitOnFuture-java.util.concurrent.Future-">waitOnFuture</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#bulkSubmit-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure:A-">bulkSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#collectAssignmentManagerMetrics--">collectAssignmentManagerMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAndSubmitAssign-org.apache.hadoop.hbase.TableName-int-">createAndSubmitAssign</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createRegionInfo-org.apache.hadoop.hbase.TableName-long-">createRegionInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/maste
 r/assignment/TestAssignmentManagerBase.html#createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createUnassignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doCrash-org.apache.hadoop.hbase.ServerName-">doCrash</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doRestart-org.apache.hadoop.hbase.ServerName-">doRestart</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">sendTransitionReport</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/assignment/TestAssignmentManagerBase.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUpMeta--">setUpMeta</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#waitOnFuture-java.util.concurrent.Future-">waitOnFuture</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html
index 7ad80e5..824ff8f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html
@@ -246,7 +246,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#bulkSubmit-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure:A-">bulkSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#collectAssignmentManagerMetrics--">collectAssignmentManagerMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAndSubmitAssign-org.apache.hadoop.hbase.TableName-int-">createAndSubmitAssign</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createRegionInfo-org.apache.hadoop.hbase.TableName-long-">createRegionInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/maste
 r/assignment/TestAssignmentManagerBase.html#createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createUnassignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doCrash-org.apache.hadoop.hbase.ServerName-">doCrash</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doRestart-org.apache.hadoop.hbase.ServerName-">doRestart</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#getAssignMaxAttempts--">getAssignMaxAttempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-">sendTransitionReport</a>, <a href="../../..
 /../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUpMeta--">setUpMeta</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#waitOnFuture-java.util.concurrent.Future-">waitOnFuture</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#bulkSubmit-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure:A-">bulkSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#collectAssignmentManagerMetrics--">collectAssignmentManagerMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAndSubmitAssign-org.apache.hadoop.hbase.TableName-int-">createAndSubmitAssign</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createAssignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createAssignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#createRegionInfo-org.apache.hadoop.hbase.TableName-long-">createRegionInfo</a>, <a href="../../../../../../org/apache/hadoop/hbase/maste
 r/assignment/TestAssignmentManagerBase.html#createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">createUnassignProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doCrash-org.apache.hadoop.hbase.ServerName-">doCrash</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#doRestart-org.apache.hadoop.hbase.ServerName-">doRestart</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#getAssignMaxAttempts--">getAssignMaxAttempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#sendTransitionReport-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">sendTransitionReport</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setupConfiguration-org.apache.hadoop.conf.Configuration-">setupConfiguration</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#setUpMeta--">setUpMeta</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#submitProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">submitProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#waitOnFuture-java.util.concurrent.Future-">waitOnFuture</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
index d6ec4a2..9c5c6a6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.322">TestAssignmentManagerBase.FaultyRsExecutor</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.325">TestAssignmentManagerBase.FaultyRsExecutor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSExecutor</a></pre>
 </li>
@@ -207,7 +207,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>exception</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.323">exception</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.326">exception</a></pre>
 </li>
 </ul>
 </li>
@@ -224,7 +224,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FaultyRsExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.325">FaultyRsExecutor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;exception)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.328">FaultyRsExecutor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;exception)</pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sendRequest</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.330">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.333">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
                                                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
index 94d0d87..ab8c2a6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
@@ -244,7 +244,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execCloseRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.306">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.309">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                             byte[]&nbsp;regionName)
                                                                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
index 619df26..0019da3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.432">TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.435">TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.GoodRsExecutor</a></pre>
 </li>
 </ul>
@@ -236,7 +236,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockList">
 <li class="blockList">
 <h4>TYPES_OF_FAILURE</h4>
-<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.433">TYPES_OF_FAILURE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.436">TYPES_OF_FAILURE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.TYPES_OF_FAILURE">Constant Field Values</a></dd>
@@ -249,7 +249,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>invocations</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.434">invocations</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.437">invocations</a></pre>
 </li>
 </ul>
 </li>
@@ -266,7 +266,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HangOnCloseThenRSCrashExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.432">HangOnCloseThenRSCrashExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.435">HangOnCloseThenRSCrashExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -283,7 +283,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execCloseRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.437">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.440">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                             byte[]&nbsp;regionName)
                                                                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
index 7427da5..f9675ae 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.377">TestAssignmentManagerBase.HangThenRSCrashExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.380">TestAssignmentManagerBase.HangThenRSCrashExecutor</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.GoodRsExecutor</a></pre>
 <div class="block">Takes open request and then returns nothing so acts like a RS that went zombie. No response (so
  proc is stuck/suspended on the Master and won't wake up.). We then send in a crash for this
@@ -235,7 +235,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>invocations</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.378">invocations</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.381">invocations</a></pre>
 </li>
 </ul>
 </li>
@@ -252,7 +252,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HangThenRSCrashExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.377">HangThenRSCrashExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.380">HangThenRSCrashExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -269,7 +269,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execOpenRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.381">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.384">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo&nbsp;openReq)
                                                                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
index c2f86a6..4f58994 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.408">TestAssignmentManagerBase.HangThenRSRestartExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.411">TestAssignmentManagerBase.HangThenRSRestartExecutor</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.GoodRsExecutor</a></pre>
 <div class="block">Takes open request and then returns nothing so acts like a RS that went zombie. No response (so
  proc is stuck/suspended on the Master and won't wake up.). Different with
@@ -237,7 +237,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>invocations</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.409">invocations</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.412">invocations</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HangThenRSRestartExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.408">HangThenRSRestartExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.411">HangThenRSRestartExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -271,7 +271,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>execOpenRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.412">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.415">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo&nbsp;openReq)
                                                                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
index d38b6e8..58a9a30 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.544">TestAssignmentManagerBase.MockRSExecutor</a></pre>
+<pre>protected static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.547">TestAssignmentManagerBase.MockRSExecutor</a></pre>
 </li>
 </ul>
 </div>
@@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sendRequest</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html#line.545">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html#line.548">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                     org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;req)
                                                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
index b222e1e..2418725 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.566">TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall</a>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.569">TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -188,7 +188,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MockRemoteCall</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.567">MockRemoteCall</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.570">MockRemoteCall</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure&gt;&nbsp;operations)</pre>
 </li>
 </ul>
@@ -206,7 +206,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sendRequest</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.573">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.576">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName,
                                                                                                               org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;request)
                                                                                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>


[17/29] hbase-site git commit: Published site at 640a5e390b525e1c42f3c46bcc5acc59786900f0.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/2bd8387f/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
index ca790a5..9f82430 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupBase.FullTableBackupClientForTest.html
@@ -72,444 +72,449 @@
 <span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.security.access.SecureTestUtil;<a name="line.64"></a>
 <span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.AfterClass;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.junit.Before;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * This class is only a base for other integration-level backup tests. Do not add tests here.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * TestBackupSmallTests is where tests that don't require bring machines up/down should go All other<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * tests should have their own classes and extend this one<a name="line.77"></a>
-<span class="sourceLineNo">078</span> */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class TestBackupBase {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupBase.class);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL2;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected static Configuration conf1 = TEST_UTIL.getConfiguration();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected static Configuration conf2;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected static TableName table1 = TableName.valueOf("table1");<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  protected static HTableDescriptor table1Desc;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  protected static TableName table2 = TableName.valueOf("table2");<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  protected static TableName table3 = TableName.valueOf("table3");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected static TableName table4 = TableName.valueOf("table4");<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static TableName table1_restore = TableName.valueOf("default:table1");<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static TableName table2_restore = TableName.valueOf("ns2:table2");<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  protected static TableName table3_restore = TableName.valueOf("ns3:table3_restore");<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected static TableName table4_restore = TableName.valueOf("ns4:table4_restore");<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected static final int NB_ROWS_IN_BATCH = 99;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected static final byte[] qualName = Bytes.toBytes("q1");<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected static String BACKUP_ROOT_DIR = Path.SEPARATOR +"backupUT";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected static String BACKUP_REMOTE_ROOT_DIR = Path.SEPARATOR + "backupUT";<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  protected static String provider = "defaultProvider";<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected static boolean secure = false;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  protected static boolean autoRestoreOnFailure = true;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected static boolean setupIsDone = false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected static boolean useSecondCluster = false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  static class IncrementalTableBackupClientForTest extends IncrementalTableBackupClient {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public IncrementalTableBackupClientForTest() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public IncrementalTableBackupClientForTest(Connection conn,<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        String backupId, BackupRequest request) throws IOException {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      super(conn, backupId, request);<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>    @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    public void execute() throws IOException {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      // case INCREMENTAL_COPY:<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        // case PREPARE_INCREMENTAL:<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        failStageIf(Stage.stage_0);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        beginBackup(backupManager, backupInfo);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>        failStageIf(Stage.stage_1);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        backupInfo.setPhase(BackupPhase.PREPARE_INCREMENTAL);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        LOG.debug("For incremental backup, current table set is "<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            + backupManager.getIncrementalBackupTableSet());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        newTimestamps = ((IncrementalBackupManager) backupManager).getIncrBackupLogFileMap();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        // copy out the table and region info files for each table<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        BackupUtils.copyTableRegionInfo(conn, backupInfo, conf);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        // convert WAL to HFiles and copy them to .tmp under BACKUP_ROOT<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        convertWALsToHFiles();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        incrementalCopyHFiles(new String[] {getBulkOutputDir().toString()},<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          backupInfo.getBackupRootDir());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        failStageIf(Stage.stage_2);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        // Save list of WAL files copied<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        backupManager.recordWALFiles(backupInfo.getIncrBackupFileList());<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>        // case INCR_BACKUP_COMPLETE:<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // Set the previousTimestampMap which is before this current log roll to the manifest.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; previousTimestampMap =<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            backupManager.readLogTimestampMap();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        backupInfo.setIncrTimestampMap(previousTimestampMap);<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        failStageIf(Stage.stage_3);<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            backupManager.readLogTimestampMap();<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>        Long newStartCode =<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            BackupUtils.getMinValue(BackupUtils.getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>        handleBulkLoad(backupInfo.getTableNames());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        failStageIf(Stage.stage_4);<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>        // backup complete<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        completeBackup(conn, backupInfo, backupManager, BackupType.INCREMENTAL, conf);<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      } catch (Exception e) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        failBackup(conn, backupInfo, backupManager, e, "Unexpected Exception : ",<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          BackupType.INCREMENTAL, conf);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        throw new IOException(e);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  static class FullTableBackupClientForTest extends FullTableBackupClient {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public FullTableBackupClientForTest() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    public FullTableBackupClientForTest(Connection conn, String backupId, BackupRequest request)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throws IOException {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      super(conn, backupId, request);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    @Override<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    public void execute() throws IOException {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      // Get the stage ID to fail on<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      try (Admin admin = conn.getAdmin()) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        // Begin BACKUP<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        beginBackup(backupManager, backupInfo);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        failStageIf(Stage.stage_0);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        String savedStartCode;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        boolean firstBackup;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        // do snapshot for full table backup<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        savedStartCode = backupManager.readBackupStartCode();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        firstBackup = savedStartCode == null || Long.parseLong(savedStartCode) == 0L;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        if (firstBackup) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          // This is our first backup. Let's put some marker to system table so that we can hold the<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          // logs while we do the backup.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          backupManager.writeBackupStartCode(0L);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        failStageIf(Stage.stage_1);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        // We roll log here before we do the snapshot. It is possible there is duplicate data<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        // in the log that is already in the snapshot. But if we do it after the snapshot, we<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        // could have data loss.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        // A better approach is to do the roll log on each RS in the same global procedure as<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        // the snapshot.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        LOG.info("Execute roll log procedure for full backup ...");<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>        Map&lt;String, String&gt; props = new HashMap&lt;&gt;();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        props.put("backupRoot", backupInfo.getBackupRootDir());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        admin.execProcedure(LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_SIGNATURE,<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_NAME, props);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        failStageIf(Stage.stage_2);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        newTimestamps = backupManager.readRegionServerLastLogRollResult();<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (firstBackup) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          // Updates registered log files<a name="line.218"></a>
-<span class="sourceLineNo">219</span>          // We record ALL old WAL files as registered, because<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          // this is a first full backup in the system and these<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          // files are not needed for next incremental backup<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          List&lt;String&gt; logFiles = BackupUtils.getWALFilesOlderThan(conf, newTimestamps);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          backupManager.recordWALFiles(logFiles);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // SNAPSHOT_TABLES:<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        backupInfo.setPhase(BackupPhase.SNAPSHOT);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        for (TableName tableName : tableList) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          String snapshotName =<a name="line.229"></a>
-<span class="sourceLineNo">230</span>              "snapshot_" + Long.toString(EnvironmentEdgeManager.currentTime()) + "_"<a name="line.230"></a>
-<span class="sourceLineNo">231</span>                  + tableName.getNamespaceAsString() + "_" + tableName.getQualifierAsString();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>          snapshotTable(admin, tableName, snapshotName);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          backupInfo.setSnapshotName(tableName, snapshotName);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        failStageIf(Stage.stage_3);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        // SNAPSHOT_COPY:<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        // do snapshot copy<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        LOG.debug("snapshot copy for " + backupId);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        snapshotCopy(backupInfo);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        // Updates incremental backup table set<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        backupManager.addIncrementalBackupTableSet(backupInfo.getTables());<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>        // BACKUP_COMPLETE:<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        backupInfo.setState(BackupState.COMPLETE);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            backupManager.readLogTimestampMap();<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>        Long newStartCode =<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            BackupUtils.getMinValue(BackupUtils<a name="line.256"></a>
-<span class="sourceLineNo">257</span>                .getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        failStageIf(Stage.stage_4);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        // backup complete<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        completeBackup(conn, backupInfo, backupManager, BackupType.FULL, conf);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>      } catch (Exception e) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>        if(autoRestoreOnFailure) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          failBackup(conn, backupInfo, backupManager, e, "Unexpected BackupException : ",<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            BackupType.FULL, conf);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        throw new IOException(e);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<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>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @throws Exception if starting the mini cluster or setting up the tables fails<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  @Before<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public void setUp() throws Exception {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (setupIsDone) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    if (secure) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // set the always on security provider<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      UserProvider.setUserProviderForTesting(TEST_UTIL.getConfiguration(),<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          HadoopSecurityEnabledUserProviderForTesting.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      // setup configuration<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      SecureTestUtil.enableSecurity(TEST_UTIL.getConfiguration());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    conf1.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    BackupManager.decorateMasterConfiguration(conf1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    BackupManager.decorateRegionServerConfiguration(conf1);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    // Set TTL for old WALs to 1 sec to enforce fast cleaning of an archived<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    // WAL files<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    conf1.setLong(TimeToLiveLogCleaner.TTL_CONF_KEY, 1000);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    conf1.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, 1000);<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    // Set MultiWAL (with 2 default WAL files per RS)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    conf1.set(WALFactory.WAL_PROVIDER, provider);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    TEST_UTIL.startMiniCluster();<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (useSecondCluster) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      conf2 = HBaseConfiguration.create(conf1);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      TEST_UTIL2 = new HBaseTestingUtility(conf2);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      TEST_UTIL2.setZkCluster(TEST_UTIL.getZkCluster());<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      TEST_UTIL2.startMiniCluster();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    conf1 = TEST_UTIL.getConfiguration();<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    TEST_UTIL.startMiniMapReduceCluster();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    BACKUP_ROOT_DIR =<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        new Path(new Path(TEST_UTIL.getConfiguration().get("fs.defaultFS")),<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          BACKUP_ROOT_DIR).toString();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    LOG.info("ROOTDIR " + BACKUP_ROOT_DIR);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    if (useSecondCluster) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      BACKUP_REMOTE_ROOT_DIR =<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          new Path(new Path(TEST_UTIL2.getConfiguration().get("fs.defaultFS"))<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          + BACKUP_REMOTE_ROOT_DIR).toString();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      LOG.info("REMOTE ROOTDIR " + BACKUP_REMOTE_ROOT_DIR);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    createTables();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    populateFromMasterConfig(TEST_UTIL.getHBaseCluster().getMaster().getConfiguration(), conf1);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    setupIsDone = true;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  private static void populateFromMasterConfig(Configuration masterConf, Configuration conf) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    Iterator&lt;Entry&lt;String, String&gt;&gt; it = masterConf.iterator();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    while (it.hasNext()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      Entry&lt;String, String&gt; e = it.next();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      conf.set(e.getKey(), e.getValue());<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @throws Exception if deleting the archive directory or shutting down the mini cluster fails<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  @AfterClass<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public static void tearDown() throws Exception {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    try{<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      SnapshotTestingUtils.deleteAllSnapshots(TEST_UTIL.getHBaseAdmin());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    } catch (Exception e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    SnapshotTestingUtils.deleteArchiveDirectory(TEST_UTIL);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    if (useSecondCluster) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      TEST_UTIL2.shutdownMiniCluster();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    TEST_UTIL.shutdownMiniMapReduceCluster();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  HTable insertIntoTable(Connection conn, TableName table, byte[] family, int id, int numRows)<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      throws IOException {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    HTable t = (HTable) conn.getTable(table);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    Put p1;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    for (int i = 0; i &lt; numRows; i++) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      p1 = new Put(Bytes.toBytes("row-" + table + "-" + id + "-" + i));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      p1.addColumn(family, qualName, Bytes.toBytes("val" + i));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      t.put(p1);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    return t;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  }<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  protected BackupRequest createBackupRequest(BackupType type,<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      List&lt;TableName&gt; tables, String path) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    BackupRequest request = builder.withBackupType(type)<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                                    .withTableList(tables)<a name="line.368"></a>
-<span class="sourceLineNo">369</span>                                    .withTargetRootDir(path).build();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return request;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  protected String backupTables(BackupType type, List&lt;TableName&gt; tables, String path)<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    Connection conn = null;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    BackupAdmin badmin = null;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    String backupId;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    try {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      conn = ConnectionFactory.createConnection(conf1);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      badmin = new BackupAdminImpl(conn);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      BackupRequest request = createBackupRequest(type, tables, path);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      backupId = badmin.backupTables(request);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    } finally {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      if (badmin != null) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        badmin.close();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      if (conn != null) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        conn.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    return backupId;<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>  protected String fullTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    return backupTables(BackupType.FULL, tables, BACKUP_ROOT_DIR);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  protected String incrementalTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return backupTables(BackupType.INCREMENTAL, tables, BACKUP_ROOT_DIR);<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>
-<span class="sourceLineNo">402</span>  protected static void loadTable(Table table) throws Exception {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    Put p; // 100 + 1 row to t1_syncup<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    for (int i = 0; i &lt; NB_ROWS_IN_BATCH; i++) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      p = new Put(Bytes.toBytes("row" + i));<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      p.setDurability(Durability.SKIP_WAL);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      p.addColumn(famName, qualName, Bytes.toBytes("val" + i));<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      table.put(p);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  protected static void createTables() throws Exception {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    long tid = System.currentTimeMillis();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    table1 = TableName.valueOf("test-" + tid);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    HBaseAdmin ha = TEST_UTIL.getHBaseAdmin();<a name="line.415"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.AfterClass;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Before;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.Logger;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.slf4j.LoggerFactory;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>/**<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * This class is only a base for other integration-level backup tests. Do not add tests here.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * TestBackupSmallTests is where tests that don't require bring machines up/down should go All other<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * tests should have their own classes and extend this one<a name="line.78"></a>
+<span class="sourceLineNo">079</span> */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>public class TestBackupBase {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupBase.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected static HBaseTestingUtility TEST_UTIL2;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected static Configuration conf1 = TEST_UTIL.getConfiguration();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected static Configuration conf2;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected static TableName table1 = TableName.valueOf("table1");<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected static HTableDescriptor table1Desc;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected static TableName table2 = TableName.valueOf("table2");<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected static TableName table3 = TableName.valueOf("table3");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected static TableName table4 = TableName.valueOf("table4");<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected static TableName table1_restore = TableName.valueOf("default:table1");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static TableName table2_restore = TableName.valueOf("ns2:table2");<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static TableName table3_restore = TableName.valueOf("ns3:table3_restore");<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static TableName table4_restore = TableName.valueOf("ns4:table4_restore");<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected static final int NB_ROWS_IN_BATCH = 99;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected static final byte[] qualName = Bytes.toBytes("q1");<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected static final byte[] famName = Bytes.toBytes("f");<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected static String BACKUP_ROOT_DIR = Path.SEPARATOR +"backupUT";<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  protected static String BACKUP_REMOTE_ROOT_DIR = Path.SEPARATOR + "backupUT";<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  protected static String provider = "defaultProvider";<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected static boolean secure = false;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  protected static boolean autoRestoreOnFailure = true;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected static boolean setupIsDone = false;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  protected static boolean useSecondCluster = false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  static class IncrementalTableBackupClientForTest extends IncrementalTableBackupClient {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public IncrementalTableBackupClientForTest() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    public IncrementalTableBackupClientForTest(Connection conn,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        String backupId, BackupRequest request) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      super(conn, backupId, request);<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 execute() throws IOException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      // case INCREMENTAL_COPY:<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      try {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        // case PREPARE_INCREMENTAL:<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        failStageIf(Stage.stage_0);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        beginBackup(backupManager, backupInfo);<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>        failStageIf(Stage.stage_1);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        backupInfo.setPhase(BackupPhase.PREPARE_INCREMENTAL);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        LOG.debug("For incremental backup, current table set is "<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            + backupManager.getIncrementalBackupTableSet());<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        newTimestamps = ((IncrementalBackupManager) backupManager).getIncrBackupLogFileMap();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        // copy out the table and region info files for each table<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        BackupUtils.copyTableRegionInfo(conn, backupInfo, conf);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        // convert WAL to HFiles and copy them to .tmp under BACKUP_ROOT<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        convertWALsToHFiles();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        incrementalCopyHFiles(new String[] {getBulkOutputDir().toString()},<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          backupInfo.getBackupRootDir());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        failStageIf(Stage.stage_2);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // Save list of WAL files copied<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        backupManager.recordWALFiles(backupInfo.getIncrBackupFileList());<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>        // case INCR_BACKUP_COMPLETE:<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        // Set the previousTimestampMap which is before this current log roll to the manifest.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; previousTimestampMap =<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            backupManager.readLogTimestampMap();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        backupInfo.setIncrTimestampMap(previousTimestampMap);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        failStageIf(Stage.stage_3);<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.157"></a>
+<span class="sourceLineNo">158</span>            backupManager.readLogTimestampMap();<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>        Long newStartCode =<a name="line.160"></a>
+<span class="sourceLineNo">161</span>            BackupUtils.getMinValue(BackupUtils.getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>        handleBulkLoad(backupInfo.getTableNames());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        failStageIf(Stage.stage_4);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>        // backup complete<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        completeBackup(conn, backupInfo, backupManager, BackupType.INCREMENTAL, conf);<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>      } catch (Exception e) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        failBackup(conn, backupInfo, backupManager, e, "Unexpected Exception : ",<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          BackupType.INCREMENTAL, conf);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        throw new IOException(e);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  static class FullTableBackupClientForTest extends FullTableBackupClient {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    public FullTableBackupClientForTest() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    public FullTableBackupClientForTest(Connection conn, String backupId, BackupRequest request)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throws IOException {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      super(conn, backupId, request);<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>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public void execute() throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Get the stage ID to fail on<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      try (Admin admin = conn.getAdmin()) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        // Begin BACKUP<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        beginBackup(backupManager, backupInfo);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        failStageIf(Stage.stage_0);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        String savedStartCode;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        boolean firstBackup;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        // do snapshot for full table backup<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        savedStartCode = backupManager.readBackupStartCode();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        firstBackup = savedStartCode == null || Long.parseLong(savedStartCode) == 0L;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        if (firstBackup) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          // This is our first backup. Let's put some marker to system table so that we can hold the<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          // logs while we do the backup.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          backupManager.writeBackupStartCode(0L);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        failStageIf(Stage.stage_1);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        // We roll log here before we do the snapshot. It is possible there is duplicate data<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        // in the log that is already in the snapshot. But if we do it after the snapshot, we<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        // could have data loss.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        // A better approach is to do the roll log on each RS in the same global procedure as<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // the snapshot.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("Execute roll log procedure for full backup ...");<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        Map&lt;String, String&gt; props = new HashMap&lt;&gt;();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        props.put("backupRoot", backupInfo.getBackupRootDir());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        admin.execProcedure(LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_SIGNATURE,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          LogRollMasterProcedureManager.ROLLLOG_PROCEDURE_NAME, props);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        failStageIf(Stage.stage_2);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        newTimestamps = backupManager.readRegionServerLastLogRollResult();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (firstBackup) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          // Updates registered log files<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          // We record ALL old WAL files as registered, because<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          // this is a first full backup in the system and these<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          // files are not needed for next incremental backup<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          List&lt;String&gt; logFiles = BackupUtils.getWALFilesOlderThan(conf, newTimestamps);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          backupManager.recordWALFiles(logFiles);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // SNAPSHOT_TABLES:<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        backupInfo.setPhase(BackupPhase.SNAPSHOT);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        for (TableName tableName : tableList) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          String snapshotName =<a name="line.230"></a>
+<span class="sourceLineNo">231</span>              "snapshot_" + Long.toString(EnvironmentEdgeManager.currentTime()) + "_"<a name="line.231"></a>
+<span class="sourceLineNo">232</span>                  + tableName.getNamespaceAsString() + "_" + tableName.getQualifierAsString();<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>          snapshotTable(admin, tableName, snapshotName);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          backupInfo.setSnapshotName(tableName, snapshotName);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        failStageIf(Stage.stage_3);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        // SNAPSHOT_COPY:<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        // do snapshot copy<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        LOG.debug("snapshot copy for " + backupId);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        snapshotCopy(backupInfo);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        // Updates incremental backup table set<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        backupManager.addIncrementalBackupTableSet(backupInfo.getTables());<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>        // BACKUP_COMPLETE:<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        // set overall backup status: complete. Here we make sure to complete the backup.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // After this checkpoint, even if entering cancel process, will let the backup finished<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        backupInfo.setState(BackupState.COMPLETE);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        // The table list in backupInfo is good for both full backup and incremental backup.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        // For incremental backup, it contains the incremental backup table set.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        backupManager.writeRegionServerLogTimestamp(backupInfo.getTables(), newTimestamps);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>        HashMap&lt;TableName, HashMap&lt;String, Long&gt;&gt; newTableSetTimestampMap =<a name="line.253"></a>
+<span class="sourceLineNo">254</span>            backupManager.readLogTimestampMap();<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>        Long newStartCode =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>            BackupUtils.getMinValue(BackupUtils<a name="line.257"></a>
+<span class="sourceLineNo">258</span>                .getRSLogTimestampMins(newTableSetTimestampMap));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        backupManager.writeBackupStartCode(newStartCode);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        failStageIf(Stage.stage_4);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        // backup complete<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        completeBackup(conn, backupInfo, backupManager, BackupType.FULL, conf);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } catch (Exception e) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>        if(autoRestoreOnFailure) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          failBackup(conn, backupInfo, backupManager, e, "Unexpected BackupException : ",<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            BackupType.FULL, conf);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        throw new IOException(e);<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>
+<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>  /**<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @throws Exception if starting the mini cluster or setting up the tables fails<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  @Before<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void setUp() throws Exception {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    if (setupIsDone) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (secure) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      // set the always on security provider<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      UserProvider.setUserProviderForTesting(TEST_UTIL.getConfiguration(),<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          HadoopSecurityEnabledUserProviderForTesting.class);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // setup configuration<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      SecureTestUtil.enableSecurity(TEST_UTIL.getConfiguration());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    conf1.setBoolean(BackupRestoreConstants.BACKUP_ENABLE_KEY, true);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    BackupManager.decorateMasterConfiguration(conf1);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    BackupManager.decorateRegionServerConfiguration(conf1);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    // Set TTL for old WALs to 1 sec to enforce fast cleaning of an archived<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    // WAL files<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    conf1.setLong(TimeToLiveLogCleaner.TTL_CONF_KEY, 1000);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    conf1.setLong(LogCleaner.OLD_WALS_CLEANER_THREAD_TIMEOUT_MSEC, 1000);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // Set MultiWAL (with 2 default WAL files per RS)<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    conf1.set(WALFactory.WAL_PROVIDER, provider);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    TEST_UTIL.startMiniCluster();<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    if (useSecondCluster) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      conf2 = HBaseConfiguration.create(conf1);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      TEST_UTIL2 = new HBaseTestingUtility(conf2);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      TEST_UTIL2.setZkCluster(TEST_UTIL.getZkCluster());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      TEST_UTIL2.startMiniDFSCluster(3);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      String root2 = TEST_UTIL2.getConfiguration().get("fs.defaultFS");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      Path p = new Path(new Path(root2), "/tmp/wal");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      CommonFSUtils.setWALRootDir(TEST_UTIL2.getConfiguration(), p);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      TEST_UTIL2.startMiniCluster();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    conf1 = TEST_UTIL.getConfiguration();<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span>    TEST_UTIL.startMiniMapReduceCluster();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    BACKUP_ROOT_DIR =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        new Path(new Path(TEST_UTIL.getConfiguration().get("fs.defaultFS")),<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          BACKUP_ROOT_DIR).toString();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    LOG.info("ROOTDIR " + BACKUP_ROOT_DIR);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    if (useSecondCluster) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      BACKUP_REMOTE_ROOT_DIR =<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          new Path(new Path(TEST_UTIL2.getConfiguration().get("fs.defaultFS"))<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          + BACKUP_REMOTE_ROOT_DIR).toString();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      LOG.info("REMOTE ROOTDIR " + BACKUP_REMOTE_ROOT_DIR);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    createTables();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    populateFromMasterConfig(TEST_UTIL.getHBaseCluster().getMaster().getConfiguration(), conf1);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    setupIsDone = true;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private static void populateFromMasterConfig(Configuration masterConf, Configuration conf) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Iterator&lt;Entry&lt;String, String&gt;&gt; it = masterConf.iterator();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    while (it.hasNext()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      Entry&lt;String, String&gt; e = it.next();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      conf.set(e.getKey(), e.getValue());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @throws Exception if deleting the archive directory or shutting down the mini cluster fails<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  @AfterClass<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public static void tearDown() throws Exception {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    try{<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      SnapshotTestingUtils.deleteAllSnapshots(TEST_UTIL.getHBaseAdmin());<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    } catch (Exception e) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    SnapshotTestingUtils.deleteArchiveDirectory(TEST_UTIL);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (useSecondCluster) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      TEST_UTIL2.shutdownMiniCluster();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    TEST_UTIL.shutdownMiniMapReduceCluster();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  HTable insertIntoTable(Connection conn, TableName table, byte[] family, int id, int numRows)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      throws IOException {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    HTable t = (HTable) conn.getTable(table);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Put p1;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (int i = 0; i &lt; numRows; i++) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      p1 = new Put(Bytes.toBytes("row-" + table + "-" + id + "-" + i));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      p1.addColumn(family, qualName, Bytes.toBytes("val" + i));<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      t.put(p1);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return t;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  protected BackupRequest createBackupRequest(BackupType type,<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      List&lt;TableName&gt; tables, String path) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    BackupRequest.Builder builder = new BackupRequest.Builder();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    BackupRequest request = builder.withBackupType(type)<a name="line.372"></a>
+<span class="sourceLineNo">373</span>                                    .withTableList(tables)<a name="line.373"></a>
+<span class="sourceLineNo">374</span>                                    .withTargetRootDir(path).build();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return request;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  protected String backupTables(BackupType type, List&lt;TableName&gt; tables, String path)<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      throws IOException {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    Connection conn = null;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    BackupAdmin badmin = null;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String backupId;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    try {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      conn = ConnectionFactory.createConnection(conf1);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      badmin = new BackupAdminImpl(conn);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      BackupRequest request = createBackupRequest(type, tables, path);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      backupId = badmin.backupTables(request);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    } finally {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      if (badmin != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        badmin.close();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      if (conn != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        conn.close();<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>    return backupId;<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected String fullTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return backupTables(BackupType.FULL, tables, BACKUP_ROOT_DIR);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  protected String incrementalTableBackup(List&lt;TableName&gt; tables) throws IOException {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    return backupTables(BackupType.INCREMENTAL, tables, BACKUP_ROOT_DIR);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  protected static void loadTable(Table table) throws Exception {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    Put p; // 100 + 1 row to t1_syncup<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    for (int i = 0; i &lt; NB_ROWS_IN_BATCH; i++) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      p = new Put(Bytes.toBytes("row" + i));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      p.setDurability(Durability.SKIP_WAL);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      p.addColumn(famName, qualName, Bytes.toBytes("val" + i));<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      table.put(p);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
 <span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>    // Create namespaces<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    NamespaceDescriptor desc1 = NamespaceDescriptor.create("ns1").build();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    NamespaceDescriptor desc2 = NamespaceDescriptor.create("ns2").build();<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    NamespaceDescriptor desc3 = NamespaceDescriptor.create("ns3").build();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    NamespaceDescriptor desc4 = NamespaceDescriptor.create("ns4").build();<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    ha.createNamespace(desc1);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    ha.createNamespace(desc2);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    ha.createNamespace(desc3);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ha.createNamespace(desc4);<a name="line.426"></a>
+<span class="sourceLineNo">417</span>  protected static void createTables() throws Exception {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    long tid = System.currentTimeMillis();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    table1 = TableName.valueOf("test-" + tid);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    HBaseAdmin ha = TEST_UTIL.getHBaseAdmin();<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>    // Create namespaces<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    NamespaceDescriptor desc1 = NamespaceDescriptor.create("ns1").build();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    NamespaceDescriptor desc2 = NamespaceDescriptor.create("ns2").build();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    NamespaceDescriptor desc3 = NamespaceDescriptor.create("ns3").build();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    NamespaceDescriptor desc4 = NamespaceDescriptor.create("ns4").build();<a name="line.426"></a>
 <span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    HTableDescriptor desc = new HTableDescriptor(table1);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    desc.addFamily(fam);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    ha.createTable(desc);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    table1Desc = desc;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Connection conn = ConnectionFactory.createConnection(conf1);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Table table = conn.getTable(table1);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    loadTable(table);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    table.close();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    table2 = TableName.valueOf("ns2:test-" + tid + 1);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    desc = new HTableDescriptor(table2);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    desc.addFamily(fam);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ha.createTable(desc);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    table = conn.getTable(table2);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    loadTable(table);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    table.close();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    table3 = TableName.valueOf("ns3:test-" + tid + 2);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    table = TEST_UTIL.createTable(table3, famName);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    table.close();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    table4 = TableName.valueOf("ns4:test-" + tid + 3);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    table = TEST_UTIL.createTable(table4, famName);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    table.close();<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    ha.close();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    conn.close();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  protected boolean checkSucceeded(String backupId) throws IOException {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    if (status == null) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      return false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    return status.getState() == BackupState.COMPLETE;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  protected boolean checkFailed(String backupId) throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    if (status == null) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    return status.getState() == BackupState.FAILED;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>  private BackupInfo getBackupInfo(String backupId) throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    try (BackupSystemTable table = new BackupSystemTable(TEST_UTIL.getConnection())) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      BackupInfo status = table.readBackupInfo(backupId);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return status;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  protected BackupAdmin getBackupAdmin() throws IOException {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    return new BackupAdminImpl(TEST_UTIL.getConnection());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Helper method<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  protected List&lt;TableName&gt; toList(String... args) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    List&lt;TableName&gt; ret = new ArrayList&lt;&gt;();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      ret.add(TableName.valueOf(args[i]));<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    return ret;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  protected void dumpBackupDir() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    // Dump Backup Dir<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    FileSystem fs = FileSystem.get(conf1);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(new Path(BACKUP_ROOT_DIR), true);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    while (it.hasNext()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      LOG.debug(Objects.toString(it.next().getPath()));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>}<a name="line.504"></a>
+<span class="sourceLineNo">428</span>    ha.createNamespace(desc1);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    ha.createNamespace(desc2);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    ha.createNamespace(desc3);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    ha.createNamespace(desc4);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HTableDescriptor desc = new HTableDescriptor(table1);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    HColumnDescriptor fam = new HColumnDescriptor(famName);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    desc.addFamily(fam);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    ha.createTable(desc);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    table1Desc = desc;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    Connection conn = ConnectionFactory.createConnection(conf1);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    Table table = conn.getTable(table1);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    loadTable(table);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    table.close();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    table2 = TableName.valueOf("ns2:test-" + tid + 1);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    desc = new HTableDescriptor(table2);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    desc.addFamily(fam);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    ha.createTable(desc);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    table = conn.getTable(table2);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    loadTable(table);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    table.close();<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    table3 = TableName.valueOf("ns3:test-" + tid + 2);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    table = TEST_UTIL.createTable(table3, famName);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    table.close();<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    table4 = TableName.valueOf("ns4:test-" + tid + 3);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    table = TEST_UTIL.createTable(table4, famName);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    table.close();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    ha.close();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    conn.close();<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  protected boolean checkSucceeded(String backupId) throws IOException {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    if (status == null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      return false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return status.getState() == BackupState.COMPLETE;<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  protected boolean checkFailed(String backupId) throws IOException {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    BackupInfo status = getBackupInfo(backupId);<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (status == null) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>    return status.getState() == BackupState.FAILED;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  private BackupInfo getBackupInfo(String backupId) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    try (BackupSystemTable table = new BackupSystemTable(TEST_UTIL.getConnection())) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      BackupInfo status = table.readBackupInfo(backupId);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      return status;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
+<span class="sourceLineNo">485</span><a name="line.485"></a>
+<span class="sourceLineNo">486</span>  protected BackupAdmin getBackupAdmin() throws IOException {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    return new BackupAdminImpl(TEST_UTIL.getConnection());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  }<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * Helper method<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   */<a name="line.492"></a>
+<span class="sourceLineNo">493</span>  protected List&lt;TableName&gt; toList(String... args) {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    List&lt;TableName&gt; ret = new ArrayList&lt;&gt;();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      ret.add(TableName.valueOf(args[i]));<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    return ret;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>  protected void dumpBackupDir() throws IOException {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    // Dump Backup Dir<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    FileSystem fs = FileSystem.get(conf1);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    RemoteIterator&lt;LocatedFileStatus&gt; it = fs.listFiles(new Path(BACKUP_ROOT_DIR), true);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    while (it.hasNext()) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.debug(Objects.toString(it.next().getPath()));<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
+<span class="sourceLineNo">509</span>}<a name="line.509"></a>