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/12/01 14:53:33 UTC

[01/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 2f0e8f921 -> f848663d6


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
index 0f6853e..0662c00 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
@@ -111,8 +111,8 @@
 <span class="sourceLineNo">103</span>    ZK_UTIL.startMiniZKCluster();<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    initTestingUtility(UTIL1, "/cluster1");<a name="line.104"></a>
 <span class="sourceLineNo">105</span>    initTestingUtility(UTIL2, "/cluster2");<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    StartMiniClusterOption option = StartMiniClusterOption.builder()<a name="line.106"></a>
-<span class="sourceLineNo">107</span>        .numMasters(2).numRegionServers(3).numDataNodes(3).build();<a name="line.107"></a>
+<span class="sourceLineNo">106</span>    StartMiniClusterOption option =<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      StartMiniClusterOption.builder().numMasters(2).numRegionServers(3).numDataNodes(3).build();<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    UTIL1.startMiniCluster(option);<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    UTIL2.startMiniCluster(option);<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    TableDescriptor td =<a name="line.110"></a>
@@ -225,16 +225,16 @@
 <span class="sourceLineNo">217</span>    return getRemoteWALDir(remoteWALDir, peerId);<a name="line.217"></a>
 <span class="sourceLineNo">218</span>  }<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  protected Path getRemoteWALDir(Path remoteWALDir, String peerId) {<a name="line.220"></a>
+<span class="sourceLineNo">220</span>  protected final Path getRemoteWALDir(Path remoteWALDir, String peerId) {<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    return new Path(remoteWALDir, peerId);<a name="line.221"></a>
 <span class="sourceLineNo">222</span>  }<a name="line.222"></a>
 <span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  protected Path getReplayRemoteWALs(Path remoteWALDir, String peerId) {<a name="line.224"></a>
+<span class="sourceLineNo">224</span>  protected final Path getReplayRemoteWALs(Path remoteWALDir, String peerId) {<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    return new Path(remoteWALDir, peerId + "-replay");<a name="line.225"></a>
 <span class="sourceLineNo">226</span>  }<a name="line.226"></a>
 <span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  protected void verifyRemovedPeer(String peerId, Path remoteWALDir, HBaseTestingUtility utility)<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      throws Exception {<a name="line.229"></a>
+<span class="sourceLineNo">228</span>  protected final void verifyRemovedPeer(String peerId, Path remoteWALDir,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      HBaseTestingUtility utility) throws Exception {<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    ReplicationPeerStorage rps = ReplicationStorageFactory<a name="line.230"></a>
 <span class="sourceLineNo">231</span>      .getReplicationPeerStorage(utility.getZooKeeperWatcher(), utility.getConfiguration());<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    try {<a name="line.232"></a>
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  }<a name="line.248"></a>
 <span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  protected void verifyReplicationRequestRejection(HBaseTestingUtility utility,<a name="line.250"></a>
+<span class="sourceLineNo">250</span>  protected final void verifyReplicationRequestRejection(HBaseTestingUtility utility,<a name="line.250"></a>
 <span class="sourceLineNo">251</span>      boolean expectedRejection) throws Exception {<a name="line.251"></a>
 <span class="sourceLineNo">252</span>    HRegionServer regionServer = utility.getRSForFirstRegionInTable(TABLE_NAME);<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    ClusterConnection connection = regionServer.getClusterConnection();<a name="line.253"></a>
@@ -278,7 +278,23 @@
 <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">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  protected final void waitUntilDeleted(HBaseTestingUtility util, Path remoteWAL) throws Exception {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    MasterFileSystem mfs = util.getMiniHBaseCluster().getMaster().getMasterFileSystem();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    util.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>      @Override<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      public boolean evaluate() throws Exception {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        return !mfs.getWALFileSystem().exists(remoteWAL);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>      @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      public String explainFailure() throws Exception {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        return remoteWAL + " has not been deleted yet";<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    });<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>}<a name="line.289"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html
new file mode 100644
index 0000000..e77bc47
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html
@@ -0,0 +1,178 @@
+<!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.replication;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.hamcrest.CoreMatchers.endsWith;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertThat;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.fs.FileStatus;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.Path;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.regionserver.LogRoller;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.ClassRule;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.Test;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.experimental.categories.Category;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.collect.Iterables;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Testcase to confirm that serial replication will not be stuck when using along with synchronous<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * replication. See HBASE-21486 for more details.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class TestSerialSyncReplication extends SyncReplicationTestBase {<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @ClassRule<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    HBaseClassTestRule.forClass(TestSerialSyncReplication.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  @Test<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public void test() throws Exception {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // change to serial<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    UTIL1.getAdmin().updateReplicationPeerConfig(PEER_ID, ReplicationPeerConfig<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      .newBuilder(UTIL1.getAdmin().getReplicationPeerConfig(PEER_ID)).setSerial(true).build());<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    UTIL2.getAdmin().updateReplicationPeerConfig(PEER_ID, ReplicationPeerConfig<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      .newBuilder(UTIL2.getAdmin().getReplicationPeerConfig(PEER_ID)).setSerial(true).build());<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      SyncReplicationState.STANDBY);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      SyncReplicationState.ACTIVE);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    UTIL2.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    writeAndVerifyReplication(UTIL1, UTIL2, 0, 100);<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>    MasterFileSystem mfs = UTIL2.getMiniHBaseCluster().getMaster().getMasterFileSystem();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    Path remoteWALDir = ReplicationUtils.getPeerRemoteWALDir(<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      new Path(mfs.getWALRootDir(), ReplicationUtils.REMOTE_WAL_DIR_NAME), PEER_ID);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    FileStatus[] remoteWALStatus = mfs.getWALFileSystem().listStatus(remoteWALDir);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    assertEquals(1, remoteWALStatus.length);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    Path remoteWAL = remoteWALStatus[0].getPath();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    assertThat(remoteWAL.getName(), endsWith(ReplicationUtils.SYNC_WAL_SUFFIX));<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    // roll the wal writer, so that we will delete the remore wal. This is used to make sure that we<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    // will not replay this wal when transiting to DA.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    for (RegionServerThread t : UTIL1.getMiniHBaseCluster().getRegionServerThreads()) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      LogRoller roller = t.getRegionServer().getWalRoller();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      roller.requestRollAll();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      roller.waitUntilWalRollFinished();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    waitUntilDeleted(UTIL2, remoteWAL);<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      SyncReplicationState.STANDBY);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // let's reopen the region<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    RegionInfo region = Iterables.getOnlyElement(UTIL2.getAdmin().getRegions(TABLE_NAME));<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    HRegionServer target = UTIL2.getOtherRegionServer(UTIL2.getRSForFirstRegionInTable(TABLE_NAME));<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    UTIL2.getAdmin().move(region.getEncodedNameAsBytes(),<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      Bytes.toBytes(target.getServerName().getServerName()));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    // here we will remove all the pending wals. This is not a normal operation sequence but anyway,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    // user could do this.<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      SyncReplicationState.STANDBY);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    // transit back to DA<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    UTIL2.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // make sure that the async replication still works<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    writeAndVerifyReplication(UTIL2, UTIL1, 100, 200);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
index 88d918d..6b6fd10 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
@@ -33,79 +33,62 @@
 <span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FileStatus;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.fs.Path;<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.Waiter.ExplainingPredicate;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.junit.ClassRule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.junit.Test;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.experimental.categories.Category;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.37"></a>
-<span class="sourceLineNo">038</span>public class TestSyncReplicationRemoveRemoteWAL extends SyncReplicationTestBase {<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>  @ClassRule<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    HBaseClassTestRule.forClass(TestSyncReplicationRemoveRemoteWAL.class);<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private void waitUntilDeleted(Path remoteWAL) throws Exception {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    MasterFileSystem mfs = UTIL2.getMiniHBaseCluster().getMaster().getMasterFileSystem();<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    UTIL1.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>      @Override<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      public boolean evaluate() throws Exception {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>        return !mfs.getWALFileSystem().exists(remoteWAL);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      }<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>      @Override<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      public String explainFailure() throws Exception {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>        return remoteWAL + " has not been deleted yet";<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      }<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    });<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  @Test<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public void testRemoveRemoteWAL() throws Exception {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      SyncReplicationState.STANDBY);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      SyncReplicationState.ACTIVE);<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    MasterFileSystem mfs = UTIL2.getMiniHBaseCluster().getMaster().getMasterFileSystem();<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    Path remoteWALDir = ReplicationUtils.getPeerRemoteWALDir(<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      new Path(mfs.getWALRootDir(), ReplicationUtils.REMOTE_WAL_DIR_NAME), PEER_ID);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    FileStatus[] remoteWALStatus = mfs.getWALFileSystem().listStatus(remoteWALDir);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    assertEquals(1, remoteWALStatus.length);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    Path remoteWAL = remoteWALStatus[0].getPath();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    assertThat(remoteWAL.getName(), endsWith(ReplicationUtils.SYNC_WAL_SUFFIX));<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    writeAndVerifyReplication(UTIL1, UTIL2, 0, 100);<a name="line.74"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.ClassRule;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.Test;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.experimental.categories.Category;<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.36"></a>
+<span class="sourceLineNo">037</span>public class TestSyncReplicationRemoveRemoteWAL extends SyncReplicationTestBase {<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>  @ClassRule<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.40"></a>
+<span class="sourceLineNo">041</span>    HBaseClassTestRule.forClass(TestSyncReplicationRemoveRemoteWAL.class);<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  @Test<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  public void testRemoveRemoteWAL() throws Exception {<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.45"></a>
+<span class="sourceLineNo">046</span>      SyncReplicationState.STANDBY);<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.47"></a>
+<span class="sourceLineNo">048</span>      SyncReplicationState.ACTIVE);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>    MasterFileSystem mfs = UTIL2.getMiniHBaseCluster().getMaster().getMasterFileSystem();<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    Path remoteWALDir = ReplicationUtils.getPeerRemoteWALDir(<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      new Path(mfs.getWALRootDir(), ReplicationUtils.REMOTE_WAL_DIR_NAME), PEER_ID);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    FileStatus[] remoteWALStatus = mfs.getWALFileSystem().listStatus(remoteWALDir);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    assertEquals(1, remoteWALStatus.length);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    Path remoteWAL = remoteWALStatus[0].getPath();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    assertThat(remoteWAL.getName(), endsWith(ReplicationUtils.SYNC_WAL_SUFFIX));<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    writeAndVerifyReplication(UTIL1, UTIL2, 0, 100);<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    HRegionServer rs = UTIL1.getRSForFirstRegionInTable(TABLE_NAME);<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    rs.getWalRoller().requestRollAll();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    // The replicated wal file should be deleted finally<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    waitUntilDeleted(UTIL2, remoteWAL);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    remoteWALStatus = mfs.getWALFileSystem().listStatus(remoteWALDir);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    assertEquals(1, remoteWALStatus.length);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    remoteWAL = remoteWALStatus[0].getPath();<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    assertThat(remoteWAL.getName(), endsWith(ReplicationUtils.SYNC_WAL_SUFFIX));<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    UTIL1.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    write(UTIL1, 100, 200);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // should still be there since the peer is disabled and we haven't replicated the data yet<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    assertTrue(mfs.getWALFileSystem().exists(remoteWAL));<a name="line.74"></a>
 <span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>    HRegionServer rs = UTIL1.getRSForFirstRegionInTable(TABLE_NAME);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    rs.getWalRoller().requestRollAll();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    // The replicated wal file should be deleted finally<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    waitUntilDeleted(remoteWAL);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    remoteWALStatus = mfs.getWALFileSystem().listStatus(remoteWALDir);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    assertEquals(1, remoteWALStatus.length);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    remoteWAL = remoteWALStatus[0].getPath();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    assertThat(remoteWAL.getName(), endsWith(ReplicationUtils.SYNC_WAL_SUFFIX));<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>    UTIL1.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    write(UTIL1, 100, 200);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>    // should still be there since the peer is disabled and we haven't replicated the data yet<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    assertTrue(mfs.getWALFileSystem().exists(remoteWAL));<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    UTIL1.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    waitUntilReplicationDone(UTIL2, 200);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    verifyThroughRegion(UTIL2, 100, 200);<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>    // Confirm that we will also remove the remote wal files in DA state<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    waitUntilDeleted(remoteWAL);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>}<a name="line.100"></a>
+<span class="sourceLineNo">076</span>    UTIL1.getAdmin().enableReplicationPeer(PEER_ID);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    waitUntilReplicationDone(UTIL2, 200);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    verifyThroughRegion(UTIL2, 100, 200);<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    // Confirm that we will also remove the remote wal files in DA state<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    waitUntilDeleted(UTIL2, remoteWAL);<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>
 
 
 


[14/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getServerManager().moveFromOnlineToDeadServers(serv

<TRUNCATED>

[20/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 7890a7b..993bb89 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index c831ffc..3ea4d41 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 47d35ed..0a78213 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -2131,6 +2131,7 @@
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationEndpoint</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationEndpoint.TestEndpoint</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialReplicationFailover</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialSyncReplication</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer" target="classFrame">TestServerAndLoad</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestServerBusyException.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestServerBusyException</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestServerBusyException.SleepCoprocessor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestServerBusyException.SleepCoprocessor</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 8becdb7..f578304 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -2131,6 +2131,7 @@
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication">TestSerialReplicationFailover</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">TestServerAndLoad</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestServerBusyException.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestServerBusyException.SleepCoprocessor.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException.SleepCoprocessor</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index f979b24..9a8fe12 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -6217,6 +6217,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication">TestSerialReplicationFailover</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationActive</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalCopyToRemote</a></dt>
@@ -38305,7 +38307,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore</a></dt>
 <dd>
@@ -39000,6 +39002,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestFlushLifeCycleTracker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionServerBulkLoad</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoadWithOldSecureEndpoint.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoadWithOldSecureEndpoint.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionServerBulkLoadWithOldSecureEndpoint</a></dt>
@@ -44247,6 +44251,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestFlushLifeCycleTracker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestIsDeleteFailure.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestIsDeleteFailure.html" title="class in org.apache.hadoop.hbase.regionserver">TestIsDeleteFailure</a></dt>
@@ -44685,6 +44691,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#test">test</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestZKReplicationPeerStorage.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestZKReplicationPeerStorage.html" title="class in org.apache.hadoop.hbase.replication">TestZKReplicationPeerStorage</a></dt>
@@ -63282,6 +63290,13 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html#TestSerialReplicationFailover--">TestSerialReplicationFailover()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication">TestSerialReplicationFailover</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSerialSyncReplication</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></dt>
+<dd>
+<div class="block">Testcase to confirm that serial replication will not be stuck when using along with synchronous
+ replication.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#TestSerialSyncReplication--">TestSerialSyncReplication()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">TestServerAndLoad</span></a> - Class in <a href="org/apache/hadoop/hbase/master/balancer/package-summary.html">org.apache.hadoop.hbase.master.balancer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html#TestServerAndLoad--">TestServerAndLoad()</a></span> - Constructor for class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">TestServerAndLoad</a></dt>
@@ -67683,8 +67698,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html#tiebreaker">tiebreaker</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator.SimpleRange</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#time">time</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.html#TimeBoundedMultiThreadedReader-org.apache.hadoop.hbase.util.test.LoadTestDataGenerator-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-double-">TimeBoundedMultiThreadedReader(LoadTestDataGenerator, Configuration, TableName, double)</a></span> - Constructor for class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.TimeBoundedMultiThreadedReaderThread.html#TimeBoundedMultiThreadedReaderThread-int-">TimeBoundedMultiThreadedReaderThread(int)</a></span> - Constructor for class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.TimeBoundedMultiThreadedReaderThread.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.TimeBoundedMultiThreadedReaderThread</a></dt>
@@ -71277,7 +71290,7 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/DualAsyncFSWALForTest.html#waitUntilArrive--">waitUntilArrive()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/DualAsyncFSWALForTest.html" title="class in org.apache.hadoop.hbase.replication">DualAsyncFSWALForTest</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#waitUntilDeleted-org.apache.hadoop.fs.Path-">waitUntilDeleted(Path)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationRemoveRemoteWAL</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted(HBaseTestingUtility, Path)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/compactions/TestMobCompactor.html#waitUntilFilesShowup-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-int-">waitUntilFilesShowup(FileSystem, Path, int)</a></span> - Method in class org.apache.hadoop.hbase.mob.compactions.<a href="org/apache/hadoop/hbase/mob/compactions/TestMobCompactor.html" title="class in org.apache.hadoop.hbase.mob.compactions">TestMobCompactor</a></dt>
 <dd>&nbsp;</dd>
@@ -71425,8 +71438,6 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestWALObserver.html#wals">wals</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestWALObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestWALObserver</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#wals">wals</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.html#wals">wals</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.html" title="class in org.apache.hadoop.hbase.regionserver">TestWALMonotonicallyIncreasingSeqId</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html#wals">wals</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestProtobufLog</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 ef6bea8..92ab2b9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -5595,58 +5595,62 @@
 </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">TestReplicationWALEntryFilters.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationWALEntryFilters.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSerialSyncReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestReplicationKillSlaveRSWithSeparateOldWALs.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRSWithSeparateOldWALs.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationWALEntryFilters.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationWALEntryFilters.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">TestPerTableCFReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestPerTableCFReplication.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationKillSlaveRSWithSeparateOldWALs.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRSWithSeparateOldWALs.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestReplicationWithTags.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestPerTableCFReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestPerTableCFReplication.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">TestReplicationSyncUpTool.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationSyncUpTool.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationWithTags.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestSyncReplicationStandBy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationSyncUpTool.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationSyncUpTool.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">TestSerialReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialReplication.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSyncReplicationStandBy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestReplicationKillRS.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationKillRS.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSerialReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialReplication.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">TestMasterReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestMasterReplication.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationKillRS.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationKillRS.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestReplicationStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationStatus.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestMasterReplication.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">TestReplicationKillMasterRSCompressed.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationStatus.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestReplicationChangingPeerRegionservers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationKillMasterRSCompressed.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.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">TestVerifyReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestReplicationChangingPeerRegionservers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </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">TestVerifyReplication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.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">TestReplicationSyncUpToolWithBulkLoadedData.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolWithBulkLoadedData.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 e011446..24baa35 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -3641,16 +3641,21 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SyncReplicationTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+                org.apache.hadoop.fs.Path&nbsp;remoteWAL)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">SyncReplicationTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                         int&nbsp;end)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">SyncReplicationTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
      int&nbsp;start,
      int&nbsp;end)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">SyncReplicationTestBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util1,
                          <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util2,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 9c5c6a6..06026c3 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.325">TestAssignmentManagerBase.FaultyRsExecutor</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.339">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.326">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.340">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.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>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.342">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.333">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.347">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/f848663d/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 ab8c2a6..9abf95b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.285">TestAssignmentManagerBase.GoodRsExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.299">TestAssignmentManagerBase.GoodRsExecutor</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>
@@ -210,7 +210,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/Tes
 <ul class="blockListLast">
 <li class="blockList">
 <h4>GoodRsExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.285">GoodRsExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.299">GoodRsExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -227,7 +227,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.GoodRsExecutor.html#line.287">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.GoodRsExecutor.html#line.301">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>
@@ -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.309">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.323">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/f848663d/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 0019da3..d2135ff 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.435">TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.449">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.436">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.450">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.437">invocations</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.451">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.435">HangOnCloseThenRSCrashExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.449">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.440">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.454">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/f848663d/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 f9675ae..1e19269 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.380">TestAssignmentManagerBase.HangThenRSCrashExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.394">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.381">invocations</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.395">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.380">HangThenRSCrashExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.394">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.384">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.398">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/f848663d/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 4f58994..d02f0d6 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.411">TestAssignmentManagerBase.HangThenRSRestartExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.425">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.412">invocations</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.426">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.411">HangThenRSRestartExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.425">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.415">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.429">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/f848663d/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 58a9a30..b102cda 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.547">TestAssignmentManagerBase.MockRSExecutor</a></pre>
+<pre>protected static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.561">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.548">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.562">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/f848663d/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 2418725..f7af995 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.569">TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall</a>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.583">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.570">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.584">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.576">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.590">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 e9fb928..26a2c13 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.552">TestAssignmentManagerBase.MockRSProcedureDispatcher</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.566">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.553">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.567">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.555">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.569">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.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>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.573">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.564">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.578">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/f848663d/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
index 8013600..aec2f73 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.153">TestAssignmentManagerBase.NoopRsExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.156">TestAssignmentManagerBase.NoopRsExecutor</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>
@@ -204,7 +204,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NoopRsExecutor</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.153">NoopRsExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.156">NoopRsExecutor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -221,7 +221,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <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.NoopRsExecutor.html#line.155">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.NoopRsExecutor.html#line.158">sendRequest</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                            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>
@@ -238,7 +238,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <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.NoopRsExecutor.html#line.172">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.NoopRsExecutor.html#line.175">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName&nbsp;server,
                                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo&nbsp;regionInfo)
                                                                                                                       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>
@@ -253,7 +253,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/
 <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.NoopRsExecutor.html#line.177">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.NoopRsExecutor.html#line.180">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/f848663d/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 979ddfe..69cec9d 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.481">TestAssignmentManagerBase.RandRsExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.495">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.482">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.496">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.481">RandRsExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.495">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.485">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.499">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.501">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.515">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.534">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.548">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/f848663d/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 4f5922f..23388d1 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.317">TestAssignmentManagerBase.ServerNotYetRunningRsExecutor</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.331">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.317">ServerNotYetRunningRsExecutor</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.331">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.319">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.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>


[26/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index d64560b..8560113 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3815,
-             Errors: 14790,
+      <title>File: 3816,
+             Errors: 14791,
              Warnings: 0,
              Infos: 0
       </title>
@@ -20962,6 +20962,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.TestSerialSyncReplication.java">org/apache/hadoop/hbase/replication/TestSerialSyncReplication.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.mapred.RowCounter.java">org/apache/hadoop/hbase/mapred/RowCounter.java</a>
                 </td>
                 <td>
@@ -30463,7 +30477,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 4b5a670..a7e02db 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 256bb20..9e2d83a 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 7e33b36..d4a1675 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 7aa5cbf..0a72b8d 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 4646f9c..85b8a21 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 128219d..e0108a3 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3831,7 +3831,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>"Fri Nov 30 14:44:18 UTC 2018"</code></td>
+<td class="colLast"><code>"Sat Dec  1 14:43:40 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3845,7 +3845,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>"50e37972f630f5708cca7f47f93c0b5e"</code></td>
+<td class="colLast"><code>"6b524fd5dc892868017c9a7a944df62c"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -15593,7 +15593,7 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="type parameter in AbstractPeerProcedure">TState</a>&gt;</span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th scope="col">Constant Field</th>
@@ -15601,17 +15601,17 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure.SLEEP_INTERVAL_MS">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure.SLEEP_INTERVAL_MS">
 <!--   -->
 </a><code>protected&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></code></td>
 <td class="colLast"><code>1000</code></td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure.UPDATE_LAST_SEQ_ID_BATCH_SIZE">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure.UPDATE_LAST_SEQ_ID_BATCH_SIZE">
 <!--   -->
 </a><code>protected&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></td>
 <td class="colLast"><code>1000</code></td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index f088d33..3c5751e 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -2633,7 +2633,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/SchemaLocking.html#addToLockedResources-java.util.List-java.util.Map-java.util.function.Function-org.apache.hadoop.hbase.procedure2.LockedResourceType-">addToLockedResources(List&lt;LockedResource&gt;, Map&lt;T, LockAndQueue&gt;, Function&lt;T, String&gt;, LockedResourceType)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/SchemaLocking.html" title="class in org.apache.hadoop.hbase.master.procedure">SchemaLocking</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap(Map&lt;String, Long&gt;, String, long, ReplicationQueueStorage)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap(Map&lt;String, Long&gt;, String, long, ReplicationQueueStorage)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#addToMovedRegions-java.lang.String-org.apache.hadoop.hbase.ServerName-long-">addToMovedRegions(String, ServerName, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
@@ -69635,6 +69635,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/RegionServerTracker.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a></dt>
@@ -77759,7 +77761,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.html#needsCompactions-org.apache.hadoop.hbase.regionserver.compactions.StripeCompactionPolicy.StripeInformationProvider-java.util.List-">needsCompactions(StripeCompactionPolicy.StripeInformationProvider, List&lt;HStoreFile&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">StripeCompactionPolicy</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId(TableStateManager, TableName)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId(TableStateManager, TableName)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HtmlQuoting.html#needsQuoting-byte:A-int-int-">needsQuoting(byte[], int, int)</a></span> - Static method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HtmlQuoting.html" title="class in org.apache.hadoop.hbase.http">HtmlQuoting</a></dt>
 <dd>
@@ -100466,6 +100468,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/RecoverStandbyProcedure.html#serial">serial</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RecoverStandbyProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RecoverStandbyProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#serial">serial</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">TransitPeerSyncReplicationStateProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.ReplicationPeerConfigBuilderImpl.html#serial">serial</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.ReplicationPeerConfigBuilderImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig.ReplicationPeerConfigBuilderImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#serial">serial</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></dt>
@@ -103465,9 +103469,9 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#setLastPeekedCell-org.apache.hadoop.hbase.Cell-">setLastPeekedCell(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId(MasterProcedureEnv, ReplicationPeerConfig)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId(MasterProcedureEnv, ReplicationPeerConfig)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable(MasterProcedureEnv, TableName, Map&lt;String, Long&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable(MasterProcedureEnv, TableName, Map&lt;String, Long&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerMetricsBuilder.html#setLastReportTimestamp-long-">setLastReportTimestamp(long)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerMetricsBuilder.html" title="class in org.apache.hadoop.hbase">ServerMetricsBuilder</a></dt>
 <dd>&nbsp;</dd>
@@ -107912,7 +107916,7 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ConnectionUtils.html#SLEEP_DELTA_NS">SLEEP_DELTA_NS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ConnectionUtils.html" title="class in org.apache.hadoop.hbase.client">ConnectionUtils</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></dt>
 <dd>
@@ -118775,7 +118779,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html#update--">update()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/MasterMaintenanceModeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterMaintenanceModeTracker</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ConnectionCache.ConnectionInfo.html#updateAccessTime--">updateAccessTime()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ConnectionCache.ConnectionInfo.html" title="class in org.apache.hadoop.hbase.util">ConnectionCache.ConnectionInfo</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 f11e74d..19c67e5 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -168,9 +168,9 @@
 <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/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>
 <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/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 889f577..de8b6a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -7665,12 +7665,12 @@ service.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
                            <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 3110163..b99d270 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/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/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/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/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/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/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/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/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/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/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/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.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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index 329f62f..e67b778 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -201,8 +201,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.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 01868e6..72b13ad 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/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/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/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/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/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/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/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/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/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/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/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/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/f848663d/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 386162d..454a067 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,12 +274,12 @@
 <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/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/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/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/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <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/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/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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..df0adf0 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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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..76f6d8f 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/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/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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index abd92a9..1799704 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -198,8 +198,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.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/class-use/TableStateManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/class-use/TableStateManager.html b/devapidocs/org/apache/hadoop/hbase/master/class-use/TableStateManager.html
index 35abf64..859eaca 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/class-use/TableStateManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/class-use/TableStateManager.html
@@ -187,7 +187,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)</code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 50ae8c5..c03b1ea 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,11 +347,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.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>
 <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.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/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/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b6da844..5f7e108 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
@@ -2462,12 +2462,12 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 8079e92..35a3477 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -215,10 +215,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.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>
+<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/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>
 </li>
 </ul>


[11/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        mas

<TRUNCATED>

[06/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getServerManager().moveFromOnlineToDeadServers(serv

<TRUNCATED>

[08/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        mas

<TRUNCATED>

[17/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html b/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
index 8f4988a..6b218a6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":9,"i5":9,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":9,"i5":9,"i6":9,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":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";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestDrainReplicationQueuesForStandBy</a>, <a href="../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationActive</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalCopyToRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replica
 tion">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationRemoveRemoteWAL</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSyncReplicationShipperQuit</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandBy</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html" title="class in org.apache.hadoop.h
 base.replication">TestSyncReplicationStandbyKillMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillRS</a>, <a href="../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureRetry</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestDrainReplicationQueuesForStandBy</a>, <a href="../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationActive</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalCopyT
 oRemote</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationRemoveRemoteWAL</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSyncReplicationShipperQuit</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html" title="class in org.apache.hadoop.hbase.replica
 tion">TestSyncReplicationStandBy</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillRS</a>, <a href="../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureRetry</a></dd>
 </dl>
 <hr>
 <br>
@@ -265,16 +265,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+                org.apache.hadoop.fs.Path&nbsp;remoteWAL)</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                         int&nbsp;end)</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
      int&nbsp;start,
      int&nbsp;end)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util1,
                          <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util2,
@@ -573,8 +578,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteWALDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.220">getRemoteWALDir</a>(org.apache.hadoop.fs.Path&nbsp;remoteWALDir,
-                                                    <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;peerId)</pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.220">getRemoteWALDir</a>(org.apache.hadoop.fs.Path&nbsp;remoteWALDir,
+                                                          <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;peerId)</pre>
 </li>
 </ul>
 <a name="getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">
@@ -583,8 +588,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplayRemoteWALs</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.224">getReplayRemoteWALs</a>(org.apache.hadoop.fs.Path&nbsp;remoteWALDir,
-                                                        <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;peerId)</pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.224">getReplayRemoteWALs</a>(org.apache.hadoop.fs.Path&nbsp;remoteWALDir,
+                                                              <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;peerId)</pre>
 </li>
 </ul>
 <a name="verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">
@@ -593,10 +598,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyRemovedPeer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.228">verifyRemovedPeer</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;peerId,
-                                 org.apache.hadoop.fs.Path&nbsp;remoteWALDir,
-                                 <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;utility)
-                          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>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.228">verifyRemovedPeer</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;peerId,
+                                       org.apache.hadoop.fs.Path&nbsp;remoteWALDir,
+                                       <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;utility)
+                                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>
@@ -606,12 +611,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>verifyReplicationRequestRejection</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.250">verifyReplicationRequestRejection</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;utility,
-                                                 boolean&nbsp;expectedRejection)
-                                          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>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.250">verifyReplicationRequestRejection</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;utility,
+                                                       boolean&nbsp;expectedRejection)
+                                                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="waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>waitUntilDeleted</h4>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.274">waitUntilDeleted</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+                                      org.apache.hadoop.fs.Path&nbsp;remoteWAL)
+                               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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html
index c0a8301..ee99334 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" target="_top">Frames</a></li>
@@ -322,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SerialReplic
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html
new file mode 100644
index 0000000..b67422f
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html
@@ -0,0 +1,334 @@
+<!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>TestSerialSyncReplication (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="TestSerialSyncReplication (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/TestSerialSyncReplication.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/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" target="_top">Frames</a></li>
+<li><a href="TestSerialSyncReplication.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>Nested&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.replication</div>
+<h2 title="Class TestSerialSyncReplication" class="title">Class TestSerialSyncReplication</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><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication.SyncReplicationTestBase</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.TestSerialSyncReplication</li>
+</ul>
+</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/replication/TestSerialSyncReplication.html#line.46">TestSerialSyncReplication</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></pre>
+<div class="block">Testcase to confirm that serial replication will not be stuck when using along with synchronous
+ replication. See HBASE-21486 for more details.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== 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>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/replication/TestSerialSyncReplication.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.SyncReplicationTestBase">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#CF">CF</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#CQ">CQ</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#PEER_ID">PEER_ID</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#REMOTE_WAL_DIR1">REMOTE_WAL_DIR1</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#REMOTE_WAL_DIR2">REMOTE_WAL_DIR2</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#TABLE_NAME">TABLE_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#UTIL1">UTIL1</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#UTIL2">UTIL2</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#ZK_U
 TIL">ZK_UTIL</a></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/replication/TestSerialSyncReplication.html#TestSerialSyncReplication--">TestSerialSyncReplication</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="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>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#test--">test</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.SyncReplicationTestBase">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></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>
+</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="blockListLast">
+<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/replication/TestSerialSyncReplication.html#line.49">CLASS_RULE</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="TestSerialSyncReplication--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestSerialSyncReplication</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#line.46">TestSerialSyncReplication</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="test--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>test</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html#line.53">test</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/TestSerialSyncReplication.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/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" target="_top">Frames</a></li>
+<li><a href="TestSerialSyncReplication.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>Nested&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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html
index 38938a9..83ac583 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -193,7 +193,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -308,7 +308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html
index 239027e..d855869 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html
@@ -195,7 +195,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtilit
 y-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbas
 e.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtilit
 y-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseT
 estingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html
index e190899..86f3bcc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html
@@ -195,7 +195,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtilit
 y-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbas
 e.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtilit
 y-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseT
 estingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html
index fb57a9b..3f081d6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html
@@ -223,7 +223,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtilit
 y-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbas
 e.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtilit
 y-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseT
 estingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
index b226e0a..19ecab6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10};
+var methods = {"i0":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.38">TestSyncReplicationRemoveRemoteWAL</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.37">TestSyncReplicationRemoveRemoteWAL</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></pre>
 </li>
 </ul>
@@ -181,17 +181,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#testRemoveRemoteWAL--">testRemoveRemoteWAL</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#waitUntilDeleted-org.apache.hadoop.fs.Path-">waitUntilDeleted</a></span>(org.apache.hadoop.fs.Path&nbsp;remoteWAL)</code>&nbsp;</td>
-</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.SyncReplicationTestBase">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -220,7 +216,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <ul class="blockListLast">
 <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/replication/TestSyncReplicationRemoveRemoteWAL.html#line.41">CLASS_RULE</a></pre>
+<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/replication/TestSyncReplicationRemoveRemoteWAL.html#line.40">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -237,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestSyncReplicationRemoveRemoteWAL</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.38">TestSyncReplicationRemoveRemoteWAL</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.37">TestSyncReplicationRemoveRemoteWAL</a>()</pre>
 </li>
 </ul>
 </li>
@@ -248,27 +244,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="waitUntilDeleted-org.apache.hadoop.fs.Path-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>waitUntilDeleted</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.44">waitUntilDeleted</a>(org.apache.hadoop.fs.Path&nbsp;remoteWAL)
-                       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="testRemoveRemoteWAL--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRemoveRemoteWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.61">testRemoveRemoteWAL</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.44">testRemoveRemoteWAL</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html
index f1dc631..1a88c44 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html
@@ -211,7 +211,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html
index f4ce5ec..218a1ab 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html
@@ -199,7 +199,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">


[28/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
Published site at d525ec6a1214f97bda560095f9775ca96d82f030.


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

Branch: refs/heads/asf-site
Commit: f848663d63c17e1834b096e4a2119d217403bf40
Parents: 2f0e8f9
Author: jenkins <bu...@apache.org>
Authored: Sat Dec 1 14:53:13 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Sat Dec 1 14:53:13 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 35298 +++++++++--------
 checkstyle.rss                                  |    20 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |    14 +-
 devapidocs/index-all.html                       |    16 +-
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hadoop/hbase/class-use/TableName.html       |     4 +-
 .../hadoop/hbase/client/package-tree.html       |    24 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |    10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     4 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../master/class-use/TableStateManager.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../procedure/class-use/MasterProcedureEnv.html |     4 +-
 .../hbase/master/procedure/package-tree.html    |     4 +-
 .../replication/AbstractPeerProcedure.html      |   169 +-
 .../master/replication/AddPeerProcedure.html    |    13 +-
 .../replication/DisablePeerProcedure.html       |    13 +-
 .../master/replication/EnablePeerProcedure.html |    13 +-
 .../master/replication/ModifyPeerProcedure.html |   198 +-
 .../master/replication/RemovePeerProcedure.html |    13 +-
 ...ransitPeerSyncReplicationStateProcedure.html |    57 +-
 .../replication/UpdatePeerConfigProcedure.html  |    13 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    16 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     6 +-
 .../hadoop/hbase/quotas/package-tree.html       |     6 +-
 .../hadoop/hbase/regionserver/package-tree.html |    20 +-
 .../hbase/regionserver/wal/package-tree.html    |     2 +-
 .../class-use/ReplicationException.html         |     6 +-
 .../class-use/ReplicationPeerConfig.html        |     2 +-
 .../class-use/ReplicationQueueStorage.html      |     2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     4 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     6 +-
 .../org/apache/hadoop/hbase/Version.html        |     4 +-
 .../replication/AbstractPeerProcedure.html      |   205 +-
 .../master/replication/ModifyPeerProcedure.html |   581 +-
 ...ransitPeerSyncReplicationStateProcedure.html |   605 +-
 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            |     1 +
 testdevapidocs/allclasses-noframe.html          |     1 +
 testdevapidocs/index-all.html                   |    23 +-
 .../hbase/class-use/HBaseClassTestRule.html     |    30 +-
 .../hbase/class-use/HBaseTestingUtility.html    |     9 +-
 ...tAssignmentManagerBase.FaultyRsExecutor.html |     8 +-
 ...estAssignmentManagerBase.GoodRsExecutor.html |     8 +-
 ...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.NoopRsExecutor.html |    10 +-
 ...estAssignmentManagerBase.RandRsExecutor.html |    12 +-
 ...nagerBase.ServerNotYetRunningRsExecutor.html |     6 +-
 ...mentManagerBase.SocketTimeoutRsExecutor.html |    16 +-
 .../assignment/TestAssignmentManagerBase.html   |    72 +-
 ...ureRetryBackoff.TestModifyPeerProcedure.html |    17 +-
 .../TestRegisterPeerWorkerWhenRestarting.html   |     2 +-
 ...ransitPeerSyncReplicationStateProcedure.html |     4 +-
 ...tPeerSyncReplicationStateProcedureRetry.html |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    12 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../regionserver/TestHRegionReplayEvents.html   |   256 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../replication/SyncReplicationTestBase.html    |    52 +-
 .../TestSerialReplicationFailover.html          |     4 +-
 .../replication/TestSerialSyncReplication.html  |   334 +
 .../replication/TestSyncReplicationActive.html  |     6 +-
 ...cReplicationMoreLogsInLocalCopyToRemote.html |     2 +-
 ...plicationMoreLogsInLocalGiveUpSplitting.html |     2 +-
 ...yncReplicationNewRSJoinBetweenRefreshes.html |     2 +-
 .../TestSyncReplicationRemoveRemoteWAL.html     |    30 +-
 .../replication/TestSyncReplicationStandBy.html |     2 +-
 .../TestSyncReplicationStandbyKillMaster.html   |     2 +-
 .../TestSyncReplicationStandbyKillRS.html       |     2 +-
 .../class-use/SyncReplicationTestBase.html      |    21 +-
 .../class-use/TestSerialSyncReplication.html    |   125 +
 .../hadoop/hbase/replication/package-frame.html |     1 +
 .../hbase/replication/package-summary.html      |    29 +-
 .../hadoop/hbase/replication/package-tree.html  |     1 +
 .../TestDrainReplicationQueuesForStandBy.html   |     2 +-
 .../TestSyncReplicationShipperQuit.html         |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 testdevapidocs/overview-tree.html               |     1 +
 ...tAssignmentManagerBase.FaultyRsExecutor.html |  1118 +-
 ...estAssignmentManagerBase.GoodRsExecutor.html |  1118 +-
 ...agerBase.HangOnCloseThenRSCrashExecutor.html |  1118 +-
 ...mentManagerBase.HangThenRSCrashExecutor.html |  1118 +-
 ...ntManagerBase.HangThenRSRestartExecutor.html |  1118 +-
 ...estAssignmentManagerBase.MockRSExecutor.html |  1118 +-
 ...ockRSProcedureDispatcher.MockRemoteCall.html |  1118 +-
 ...ntManagerBase.MockRSProcedureDispatcher.html |  1118 +-
 ...estAssignmentManagerBase.NoopRsExecutor.html |  1118 +-
 ...estAssignmentManagerBase.RandRsExecutor.html |  1118 +-
 ...nagerBase.ServerNotYetRunningRsExecutor.html |  1118 +-
 ...mentManagerBase.SocketTimeoutRsExecutor.html |  1118 +-
 .../assignment/TestAssignmentManagerBase.html   |  1118 +-
 .../regionserver/TestHRegionReplayEvents.html   |  3178 +-
 .../replication/SyncReplicationTestBase.html    |    32 +-
 .../replication/TestSerialSyncReplication.html  |   178 +
 .../TestSyncReplicationRemoveRemoteWAL.html     |   127 +-
 136 files changed, 28831 insertions(+), 27881 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 3bfc09e..39e269e 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 0c6ca50..e9035fa 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:20181130143318+00'00')
-/CreationDate (D:20181130144908+00'00')
+/ModDate (D:20181201143234+00'00')
+/CreationDate (D:20181201144915+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index c3b4647..df5c0b7 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-30 14:33:18 UTC
+Last updated 2018-12-01 14:32:34 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index eebc3ab..262092b 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 


[10/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getServerManager().moveFromOnlineToDeadServers(serv

<TRUNCATED>

[19/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 6584897..49860d7 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.339">TestAssignmentManagerBase.SocketTimeoutRsExecutor</a>
+<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.353">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.340">maxSocketTimeoutRetries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.354">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.341">maxServerRetries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.355">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.343">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.357">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.344">sockTimeoutRetries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.358">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.345">serverRetries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.359">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.347">SocketTimeoutRsExecutor</a>(int&nbsp;maxSocketTimeoutRetries,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.361">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.353">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.367">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/f848663d/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 6af1282..088ef7a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.83">TestAssignmentManagerBase</a>
+<pre>public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.86">TestAssignmentManagerBase</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">Base class for AM test.</div>
 </li>
@@ -398,7 +398,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/master/assignment/TestAssignmentManagerBase.html#line.85">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.88">LOG</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -407,7 +407,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.88">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.91">name</a></pre>
 </li>
 </ul>
 <a name="exception">
@@ -416,7 +416,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>exception</h4>
-<pre>public final&nbsp;org.junit.rules.ExpectedException <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.90">exception</a></pre>
+<pre>public final&nbsp;org.junit.rules.ExpectedException <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.93">exception</a></pre>
 </li>
 </ul>
 <a name="PROC_NTHREADS">
@@ -425,7 +425,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>PROC_NTHREADS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.92">PROC_NTHREADS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.95">PROC_NTHREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.TestAssignmentManagerBase.PROC_NTHREADS">Constant Field Values</a></dd>
@@ -438,7 +438,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NREGIONS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.93">NREGIONS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.96">NREGIONS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.TestAssignmentManagerBase.NREGIONS">Constant Field Values</a></dd>
@@ -451,7 +451,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NSERVERS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.94">NSERVERS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.97">NSERVERS</a></pre>
 </li>
 </ul>
 <a name="util">
@@ -460,7 +460,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>util</h4>
-<pre>protected&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/TestAssignmentManagerBase.html#line.96">util</a></pre>
+<pre>protected&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/TestAssignmentManagerBase.html#line.99">util</a></pre>
 </li>
 </ul>
 <a name="rsDispatcher">
@@ -469,7 +469,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rsDispatcher</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSProcedureDispatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.97">rsDispatcher</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentManagerBase.MockRSProcedureDispatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.100">rsDispatcher</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -478,7 +478,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/MockMasterServices.html" title="class in org.apache.hadoop.hbase.master.assignment">MockMasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.98">master</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/MockMasterServices.html" title="class in org.apache.hadoop.hbase.master.assignment">MockMasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.101">master</a></pre>
 </li>
 </ul>
 <a name="am">
@@ -487,7 +487,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>am</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.99">am</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.AssignmentManager <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.102">am</a></pre>
 </li>
 </ul>
 <a name="regionsToRegionServers">
@@ -496,7 +496,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsToRegionServers</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.100">regionsToRegionServers</a></pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.103">regionsToRegionServers</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -505,7 +505,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.103">executor</a></pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.106">executor</a></pre>
 </li>
 </ul>
 <a name="assignProcMetrics">
@@ -514,7 +514,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assignProcMetrics</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureMetrics <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.105">assignProcMetrics</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureMetrics <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.108">assignProcMetrics</a></pre>
 </li>
 </ul>
 <a name="unassignProcMetrics">
@@ -523,7 +523,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignProcMetrics</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureMetrics <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.106">unassignProcMetrics</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureMetrics <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.109">unassignProcMetrics</a></pre>
 </li>
 </ul>
 <a name="assignSubmittedCount">
@@ -532,7 +532,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assignSubmittedCount</h4>
-<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.108">assignSubmittedCount</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.111">assignSubmittedCount</a></pre>
 </li>
 </ul>
 <a name="assignFailedCount">
@@ -541,7 +541,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assignFailedCount</h4>
-<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.109">assignFailedCount</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.112">assignFailedCount</a></pre>
 </li>
 </ul>
 <a name="unassignSubmittedCount">
@@ -550,7 +550,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignSubmittedCount</h4>
-<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.110">unassignSubmittedCount</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.113">unassignSubmittedCount</a></pre>
 </li>
 </ul>
 <a name="unassignFailedCount">
@@ -559,7 +559,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>unassignFailedCount</h4>
-<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.111">unassignFailedCount</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.114">unassignFailedCount</a></pre>
 </li>
 </ul>
 </li>
@@ -576,7 +576,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestAssignmentManagerBase</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.83">TestAssignmentManagerBase</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.86">TestAssignmentManagerBase</a>()</pre>
 </li>
 </ul>
 </li>
@@ -593,7 +593,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignMaxAttempts</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.113">getAssignMaxAttempts</a>()</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.116">getAssignMaxAttempts</a>()</pre>
 </li>
 </ul>
 <a name="setupConfiguration-org.apache.hadoop.conf.Configuration-">
@@ -602,7 +602,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupConfiguration</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.118">setupConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.121">setupConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                            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>
@@ -616,7 +616,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/master/assignment/TestAssignmentManagerBase.html#line.128">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.131">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>
@@ -630,7 +630,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpMeta</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.141">setUpMeta</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.144">setUpMeta</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>
@@ -644,7 +644,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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.148">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.151">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>
@@ -658,7 +658,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>submitProcedure</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.183">submitProcedure</a>(org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;proc)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.186">submitProcedure</a>(org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="waitOnFuture-java.util.concurrent.Future-">
@@ -667,7 +667,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>waitOnFuture</h4>
-<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.187">waitOnFuture</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;byte[]&gt;&nbsp;future)
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.190">waitOnFuture</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;byte[]&gt;&nbsp;future)
                        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>
@@ -681,7 +681,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkSubmit</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.205">bulkSubmit</a>(org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure[]&nbsp;procs)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.208">bulkSubmit</a>(org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure[]&nbsp;procs)
                    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>
@@ -695,7 +695,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAndSubmitAssign</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.231">createAndSubmitAssign</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.234">createAndSubmitAssign</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                                                       int&nbsp;regionId)</pre>
 </li>
 </ul>
@@ -705,7 +705,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionInfo</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.RegionInfo&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.238">createRegionInfo</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.RegionInfo&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.241">createRegionInfo</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                      long&nbsp;regionId)</pre>
 </li>
 </ul>
@@ -715,7 +715,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createAssignProcedure</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.243">createAssignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.246">createAssignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="createUnassignProcedure-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -724,7 +724,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createUnassignProcedure</h4>
-<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>
+<pre>protected&nbsp;org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.250">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-long-">
@@ -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>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,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.265">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,
                                     long&nbsp;seqId)
@@ -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>doCrash</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.273">doCrash</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.276">doCrash</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName)</pre>
 </li>
 </ul>
 <a name="doRestart-org.apache.hadoop.hbase.ServerName-">
@@ -759,7 +759,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doRestart</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.277">doRestart</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.291">doRestart</a>(org.apache.hadoop.hbase.ServerName&nbsp;serverName)</pre>
 </li>
 </ul>
 <a name="collectAssignmentManagerMetrics--">
@@ -768,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.583">collectAssignmentManagerMetrics</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.597">collectAssignmentManagerMetrics</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html
index 47e693c..bbe846f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html
@@ -75,7 +75,7 @@ var activeTableTab = "activeTableTab";
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
@@ -186,18 +186,11 @@ extends org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</pre>
 </a>
 <h3>Field Summary</h3>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</h3>
-<code>SLEEP_INTERVAL_MS, UPDATE_LAST_SEQ_ID_BATCH_SIZE</code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</h3>
-<code>latch</code></li>
+<code>latch, SLEEP_INTERVAL_MS, UPDATE_LAST_SEQ_ID_BATCH_SIZE</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -304,14 +297,14 @@ extends org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</h3>
-<code>executeFromState, getInitialState, getNewPeerConfig, getOldPeerConfig, getState, getStateId, releaseLatch, setLastPushedSequenceId, setLastPushedSequenceIdForTable</code></li>
+<code>executeFromState, getInitialState, getNewPeerConfig, getOldPeerConfig, getState, getStateId, releaseLatch</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</h3>
-<code>acquireLock, getLatch, holdLock, refreshPeer, releaseLock</code></li>
+<code>acquireLock, getLatch, holdLock, refreshPeer, releaseLock, setLastPushedSequenceId, setLastPushedSequenceIdForTable</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -608,7 +601,7 @@ extends org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</pre>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
index c7d4b4c..0bf289d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
@@ -215,7 +215,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.
 HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilRepli
 cationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.
 HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDelet
 ed-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html
index 2d0c6c8..5e175ed 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html
@@ -197,7 +197,7 @@ extends org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationSta
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</h3>
-<code>latch</code></li>
+<code>latch, SLEEP_INTERVAL_MS, UPDATE_LAST_SEQ_ID_BATCH_SIZE</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -300,7 +300,7 @@ extends org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationSta
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</h3>
-<code>acquireLock, enablePeer, getLatch, holdLock, refreshPeer, releaseLock</code></li>
+<code>acquireLock, enablePeer, getLatch, holdLock, refreshPeer, releaseLock, setLastPushedSequenceId, setLastPushedSequenceIdForTable</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
index c17526e..228cc13 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
@@ -191,7 +191,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.
 HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilRepli
 cationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.
 HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDelet
 ed-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/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 bd291d1..035737c 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/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/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/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/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/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/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/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/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/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/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/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/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/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/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 4e9272f..6e82899 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -234,9 +234,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.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/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/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>


[04/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getSer

<TRUNCATED>

[23/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
index b08e40d..74159cd 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
@@ -207,18 +207,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -347,14 +340,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apach
 e/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apach
 e/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 d4b46fb..7fecd9d 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -433,18 +433,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.<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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 f63e6a1..f6e32b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,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.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>
-<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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 fb76e2b..2357779 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,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.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/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/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/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/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/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</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/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/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/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 4779280..52bcb5f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -716,20 +716,20 @@
 <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/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/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/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/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/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/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</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/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/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/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/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/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</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/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/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/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.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/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index f0c55c8..e8df157 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,8 +247,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.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
index 5e4059f..5dac399 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationException.html
@@ -387,7 +387,7 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
         <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;encodedRegionName,
         long&nbsp;barrier,
         <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage)</code>&nbsp;</td>
@@ -468,12 +468,12 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerConfig.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerConfig.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerConfig.html
index e6e79dc..56ee69d 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerConfig.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationPeerConfig.html
@@ -681,7 +681,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationQueueStorage.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationQueueStorage.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationQueueStorage.html
index b2fbd03..264037f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationQueueStorage.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationQueueStorage.html
@@ -154,7 +154,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
         <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;encodedRegionName,
         long&nbsp;barrier,
         <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index c20ff47..034077c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,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.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 63c8b20..f00f533 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -141,10 +141,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.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/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/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</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>
 <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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 03e1383..4ade4c1 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/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/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/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 7ff3ca9..0661cfe 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/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>
+<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/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/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/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/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>
-<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/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/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 af25c37..e4f5830 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 = "Fri Nov 30 14:44:18 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sat Dec  1 14:43:40 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 = "50e37972f630f5708cca7f47f93c0b5e";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "6b524fd5dc892868017c9a7a944df62c";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
index b1a431d..d7ef2c2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
@@ -25,65 +25,158 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.replication;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * The base class for all replication peer related procedure.<a name="line.29"></a>
-<span class="sourceLineNo">030</span> */<a name="line.30"></a>
-<span class="sourceLineNo">031</span>@InterfaceAudience.Private<a name="line.31"></a>
-<span class="sourceLineNo">032</span>public abstract class AbstractPeerProcedure&lt;TState&gt;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>    extends AbstractPeerNoLockProcedure&lt;TState&gt; implements PeerProcedureInterface {<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>  // used to keep compatible with old client where we can only returns after updateStorage.<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  protected ProcedurePrepareLatch latch;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>  protected AbstractPeerProcedure() {<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  }<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  protected AbstractPeerProcedure(String peerId) {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    super(peerId);<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    this.latch = ProcedurePrepareLatch.createLatch(2, 1);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  public ProcedurePrepareLatch getLatch() {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    return latch;<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>  @Override<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  protected LockState acquireLock(MasterProcedureEnv env) {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    if (env.getProcedureScheduler().waitPeerExclusiveLock(this, peerId)) {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    }<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    return LockState.LOCK_ACQUIRED;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.InterruptedIOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.HashMap;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableName;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.TableStateManager.TableStateNotFoundException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Pair;<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><a name="line.43"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * The base class for all replication peer related procedure.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public abstract class AbstractPeerProcedure&lt;TState&gt; extends AbstractPeerNoLockProcedure&lt;TState&gt;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    implements PeerProcedureInterface {<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static final Logger LOG = LoggerFactory.getLogger(AbstractPeerProcedure.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  protected static final int UPDATE_LAST_SEQ_ID_BATCH_SIZE = 1000;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  // The sleep interval when waiting table to be enabled or disabled.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  protected static final int SLEEP_INTERVAL_MS = 1000;<a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Override<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  protected void releaseLock(MasterProcedureEnv env) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    env.getProcedureScheduler().wakePeerExclusiveLock(this, peerId);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  @Override<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  protected boolean holdLock(MasterProcedureEnv env) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    return true;<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>  protected final void refreshPeer(MasterProcedureEnv env, PeerOperationType type) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      .map(sn -&gt; new RefreshPeerProcedure(peerId, type, sn)).toArray(RefreshPeerProcedure[]::new));<a name="line.70"></a>
+<span class="sourceLineNo">058</span>  // used to keep compatible with old client where we can only returns after updateStorage.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected ProcedurePrepareLatch latch;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  protected AbstractPeerProcedure() {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  }<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected AbstractPeerProcedure(String peerId) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    super(peerId);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this.latch = ProcedurePrepareLatch.createLatch(2, 1);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public ProcedurePrepareLatch getLatch() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    return latch;<a name="line.70"></a>
 <span class="sourceLineNo">071</span>  }<a name="line.71"></a>
 <span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // will be override in test to simulate error<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  @VisibleForTesting<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected void enablePeer(MasterProcedureEnv env) throws ReplicationException {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    env.getReplicationPeerManager().enablePeer(peerId);<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">073</span>  @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected LockState acquireLock(MasterProcedureEnv env) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    if (env.getProcedureScheduler().waitPeerExclusiveLock(this, peerId)) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    return LockState.LOCK_ACQUIRED;<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>  @Override<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  protected void releaseLock(MasterProcedureEnv env) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    env.getProcedureScheduler().wakePeerExclusiveLock(this, peerId);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected boolean holdLock(MasterProcedureEnv env) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    return true;<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>  protected final void refreshPeer(MasterProcedureEnv env, PeerOperationType type) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      .map(sn -&gt; new RefreshPeerProcedure(peerId, type, sn)).toArray(RefreshPeerProcedure[]::new));<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>  // will be override in test to simulate error<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  @VisibleForTesting<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  protected void enablePeer(MasterProcedureEnv env) throws ReplicationException {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    env.getReplicationPeerManager().enablePeer(peerId);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private void addToMap(Map&lt;String, Long&gt; lastSeqIds, String encodedRegionName, long barrier,<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      ReplicationQueueStorage queueStorage) throws ReplicationException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    if (barrier &gt;= 0) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      lastSeqIds.put(encodedRegionName, barrier);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      if (lastSeqIds.size() &gt;= UPDATE_LAST_SEQ_ID_BATCH_SIZE) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        queueStorage.setLastSequenceIds(peerId, lastSeqIds);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        lastSeqIds.clear();<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>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected final void setLastPushedSequenceId(MasterProcedureEnv env,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      ReplicationPeerConfig peerConfig) throws IOException, ReplicationException {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    Map&lt;String, Long&gt; lastSeqIds = new HashMap&lt;String, Long&gt;();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (TableDescriptor td : env.getMasterServices().getTableDescriptors().getAll().values()) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      if (!td.hasGlobalReplicationScope()) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        continue;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      TableName tn = td.getTableName();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      if (!ReplicationUtils.contains(peerConfig, tn)) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        continue;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      setLastPushedSequenceIdForTable(env, tn, lastSeqIds);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    if (!lastSeqIds.isEmpty()) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      env.getReplicationPeerManager().getQueueStorage().setLastSequenceIds(peerId, lastSeqIds);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // If the table is currently disabling, then we need to wait until it is disabled.We will write<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // replication barrier for a disabled table. And return whether we need to update the last pushed<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // sequence id, if the table has been deleted already, i.e, we hit TableStateNotFoundException,<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // then we do not need to update last pushed sequence id for this table.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private boolean needSetLastPushedSequenceId(TableStateManager tsm, TableName tn)<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      throws IOException {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    for (;;) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      try {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        if (!tsm.getTableState(tn).isDisabling()) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>          return true;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        Thread.sleep(SLEEP_INTERVAL_MS);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      } catch (TableStateNotFoundException e) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        return false;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      } catch (InterruptedException e) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        throw (IOException) new InterruptedIOException(e.getMessage()).initCause(e);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  // Will put the encodedRegionName-&gt;lastPushedSeqId pair into the map passed in, if the map is<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  // large enough we will call queueStorage.setLastSequenceIds and clear the map. So the caller<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  // should not forget to check whether the map is empty at last, if not you should call<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  // queueStorage.setLastSequenceIds to write out the remaining entries in the map.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  protected final void setLastPushedSequenceIdForTable(MasterProcedureEnv env, TableName tableName,<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      Map&lt;String, Long&gt; lastSeqIds) throws IOException, ReplicationException {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    ReplicationQueueStorage queueStorage = env.getReplicationPeerManager().getQueueStorage();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    Connection conn = env.getMasterServices().getConnection();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (!needSetLastPushedSequenceId(tsm, tableName)) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      LOG.debug("Skip settting last pushed sequence id for {}", tableName);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      return;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    for (Pair&lt;String, Long&gt; name2Barrier : MetaTableAccessor<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      .getTableEncodedRegionNameAndLastBarrier(conn, tableName)) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      LOG.trace("Update last pushed sequence id for {}, {}", tableName, name2Barrier);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      addToMap(lastSeqIds, name2Barrier.getFirst(), name2Barrier.getSecond().longValue() - 1,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        queueStorage);<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>}<a name="line.171"></a>
 
 
 


[24/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index fccb3b5..6abee8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":6,"i12":6,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":6};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":6,"i10":6,"i11":10,"i12":10,"i13":10,"i14":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -138,7 +138,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.54">ModifyPeerProcedure</a>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.48">ModifyPeerProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</pre>
 <div class="block">The base class for all replication peer related procedure except sync replication state
  transition.</div>
@@ -193,21 +193,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></span></code>&nbsp;</td>
-</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -268,104 +260,81 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
-        <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;encodedRegionName,
-        long&nbsp;barrier,
-        <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a></span>()</code>
 <div class="block">The implementation class should override this method if the procedure may enter the serial
  related states.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</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.PeerModificationState&nbsp;state)</code>
 <div class="block">called to perform a single step of the specified 'state' of the procedure</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a></span>()</code>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a></span>(int&nbsp;stateId)</code>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</code>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#needReopen-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needReopen</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
           <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
-                           <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a></span>()</code>
 <div class="block">Implementation class can override this method.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#postPeerModification-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postPeerModification</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">Called before we finish the procedure.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#prePeerModification-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">prePeerModification</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">Called before we start the actual processing.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</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 id="i14" class="altColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</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 id="i15" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</code>&nbsp;</td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)</code>&nbsp;</td>
-</tr>
-<tr id="i17" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</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 id="i18" class="altColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updatePeerStorage-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updatePeerStorage</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>
@@ -375,7 +344,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -429,36 +398,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <a name="LOG">
 <!--   -->
 </a>
-<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/replication/ModifyPeerProcedure.html#line.56">LOG</a></pre>
-</li>
-</ul>
-<a name="UPDATE_LAST_SEQ_ID_BATCH_SIZE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>UPDATE_LAST_SEQ_ID_BATCH_SIZE</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.58">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure.UPDATE_LAST_SEQ_ID_BATCH_SIZE">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="SLEEP_INTERVAL_MS">
-<!--   -->
-</a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>SLEEP_INTERVAL_MS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.61">SLEEP_INTERVAL_MS</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure.SLEEP_INTERVAL_MS">Constant Field Values</a></dd>
-</dl>
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.50">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -475,7 +418,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>ModifyPeerProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.63">ModifyPeerProcedure</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.52">ModifyPeerProcedure</a>()</pre>
 </li>
 </ul>
 <a name="ModifyPeerProcedure-java.lang.String-">
@@ -484,7 +427,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ModifyPeerProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.66">ModifyPeerProcedure</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;peerId)</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.55">ModifyPeerProcedure</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;peerId)</pre>
 </li>
 </ul>
 </li>
@@ -501,7 +444,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>prePeerModification</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.77">prePeerModification</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 abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.66">prePeerModification</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="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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</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>
@@ -524,7 +467,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>updatePeerStorage</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.80">updatePeerStorage</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 abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.69">updatePeerStorage</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/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -538,7 +481,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>postPeerModification</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.91">postPeerModification</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 abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.80">postPeerModification</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="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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block">Called before we finish the procedure. The implementation can do some logging work, and also
@@ -561,7 +504,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseLatch</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.94">releaseLatch</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;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.83">releaseLatch</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="nextStateAfterRefresh--">
@@ -570,7 +513,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>nextStateAfterRefresh</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.102">nextStateAfterRefresh</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.91">nextStateAfterRefresh</a>()</pre>
 <div class="block">Implementation class can override this method. By default we will jump to
  POST_PEER_MODIFICATION and finish the procedure.</div>
 </li>
@@ -581,7 +524,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>enablePeerBeforeFinish</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.110">enablePeerBeforeFinish</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.99">enablePeerBeforeFinish</a>()</pre>
 <div class="block">The implementation class should override this method if the procedure may enter the serial
  related states.</div>
 </li>
@@ -592,7 +535,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldPeerConfig</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.114">getOldPeerConfig</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.103">getOldPeerConfig</a>()</pre>
 </li>
 </ul>
 <a name="getNewPeerConfig--">
@@ -601,7 +544,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getNewPeerConfig</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.118">getNewPeerConfig</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.107">getNewPeerConfig</a>()</pre>
 </li>
 </ul>
 <a name="updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -610,7 +553,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>updateLastPushedSequenceIdForSerialPeer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.122">updateLastPushedSequenceIdForSerialPeer</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/replication/ModifyPeerProcedure.html#line.111">updateLastPushedSequenceIdForSerialPeer</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="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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
@@ -626,7 +569,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>needReopen</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.129">needReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.118">needReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)
                     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>
@@ -641,7 +584,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>reopenRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.150">reopenRegions</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/replication/ModifyPeerProcedure.html#line.139">reopenRegions</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="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>
@@ -649,80 +592,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 </dl>
 </li>
 </ul>
-<a name="addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>addToMap</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.172">addToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
-                      <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;encodedRegionName,
-                      long&nbsp;barrier,
-                      <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage)
-               throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setLastPushedSequenceId</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.183">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)
-                                      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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</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>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>needSetLastPushedSequenceId</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.205">needSetLastPushedSequenceId</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
-                                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)
-                                     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="setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setLastPushedSequenceIdForTable</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.225">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)
-                                              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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</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>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></code></dd>
-</dl>
-</li>
-</ul>
 <a name="executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">
 <!--   -->
 </a>
 <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/replication/ModifyPeerProcedure.html#line.243">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/replication/ModifyPeerProcedure.html#line.162">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.PeerModificationState&nbsp;state)
                                                throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</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>
@@ -747,7 +623,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.341">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.260">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>
@@ -766,7 +642,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.346">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.265">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&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>
@@ -785,7 +661,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.351">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.270">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
index 976c4c7..a16bb7c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
@@ -199,18 +199,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -311,14 +304,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../.
 ./../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a hr
 ef="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../.
 ./../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
index 5ca2906..888fc66 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
@@ -197,6 +197,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#serial">serial</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#toState">toState</a></span></code>&nbsp;</td>
 </tr>
@@ -206,7 +210,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -353,7 +357,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -434,12 +438,21 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <a name="enabled">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>enabled</h4>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.59">enabled</a></pre>
 </li>
 </ul>
+<a name="serial">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>serial</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.61">serial</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -454,7 +467,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>TransitPeerSyncReplicationStateProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.61">TransitPeerSyncReplicationStateProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.63">TransitPeerSyncReplicationStateProcedure</a>()</pre>
 </li>
 </ul>
 <a name="TransitPeerSyncReplicationStateProcedure-java.lang.String-org.apache.hadoop.hbase.replication.SyncReplicationState-">
@@ -463,7 +476,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TransitPeerSyncReplicationStateProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.64">TransitPeerSyncReplicationStateProcedure</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;peerId,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.66">TransitPeerSyncReplicationStateProcedure</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;peerId,
                                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a>&nbsp;state)</pre>
 </li>
 </ul>
@@ -481,7 +494,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeerOperationType</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.70">getPeerOperationType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.72">getPeerOperationType</a>()</pre>
 </li>
 </ul>
 <a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
@@ -490,7 +503,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.75">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/replication/TransitPeerSyncReplicationStateProcedure.html#line.77">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
@@ -512,7 +525,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.87">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/replication/TransitPeerSyncReplicationStateProcedure.html#line.89">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
@@ -533,7 +546,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.98">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.100">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>
@@ -552,7 +565,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.103">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.105">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState&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>
@@ -571,7 +584,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.108">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.110">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>
@@ -588,7 +601,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>preTransit</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.113">preTransit</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/replication/TransitPeerSyncReplicationStateProcedure.html#line.115">preTransit</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="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>
@@ -602,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>postTransit</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.134">postTransit</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/replication/TransitPeerSyncReplicationStateProcedure.html#line.137">postTransit</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="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>
@@ -616,7 +629,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>reopenRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.146">reopenRegions</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;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.149">reopenRegions</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="createDirForRemoteWAL-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -625,7 +638,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirForRemoteWAL</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.153">createDirForRemoteWAL</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/replication/TransitPeerSyncReplicationStateProcedure.html#line.156">createDirForRemoteWAL</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="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>
@@ -639,7 +652,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>setNextStateAfterRefreshBegin</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.166">setNextStateAfterRefreshBegin</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.169">setNextStateAfterRefreshBegin</a>()</pre>
 </li>
 </ul>
 <a name="setNextStateAfterRefreshEnd--">
@@ -648,7 +661,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>setNextStateAfterRefreshEnd</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.181">setNextStateAfterRefreshEnd</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.188">setNextStateAfterRefreshEnd</a>()</pre>
 </li>
 </ul>
 <a name="replayRemoteWAL-boolean-">
@@ -657,7 +670,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>replayRemoteWAL</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.192">replayRemoteWAL</a>(boolean&nbsp;serial)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.204">replayRemoteWAL</a>(boolean&nbsp;serial)</pre>
 </li>
 </ul>
 <a name="setPeerNewSyncReplicationState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -666,7 +679,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>setPeerNewSyncReplicationState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.197">setPeerNewSyncReplicationState</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/replication/TransitPeerSyncReplicationStateProcedure.html#line.209">setPeerNewSyncReplicationState</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/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -680,7 +693,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>removeAllReplicationQueues</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.210">removeAllReplicationQueues</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/replication/TransitPeerSyncReplicationStateProcedure.html#line.228">removeAllReplicationQueues</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/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -694,7 +707,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockList">
 <li class="blockList">
 <h4>transitPeerSyncReplicationState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.215">transitPeerSyncReplicationState</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/replication/TransitPeerSyncReplicationStateProcedure.html#line.233">transitPeerSyncReplicationState</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/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -708,7 +721,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
 <ul class="blockListLast">
 <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/replication/TransitPeerSyncReplicationStateProcedure.html#line.221">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/replication/TransitPeerSyncReplicationStateProcedure.html#line.239">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.PeerSyncReplicationStateTransitionState&nbsp;state)
                                                throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>


[07/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getServerManager().moveFromOnlineToDeadServers(serv

<TRUNCATED>

[12/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getSer

<TRUNCATED>

[05/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">3

<TRUNCATED>

[13/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLine

<TRUNCATED>

[15/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getServerManager().moveFromOnlineToDeadSe

<TRUNCATED>

[22/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index 5a68698..2b52e1c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -27,339 +27,258 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.InterruptedIOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.HashMap;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableName;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.master.TableStateManager.TableStateNotFoundException;<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.master.procedure.ProcedurePrepareLatch;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.master.procedure.ReopenTableRegionsProcedure;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.Pair;<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.generated.MasterProcedureProtos.PeerModificationState;<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 base class for all replication peer related procedure except sync replication state<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * transition.<a name="line.51"></a>
-<span class="sourceLineNo">052</span> */<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceAudience.Private<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public abstract class ModifyPeerProcedure extends AbstractPeerProcedure&lt;PeerModificationState&gt; {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final Logger LOG = LoggerFactory.getLogger(ModifyPeerProcedure.class);<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected static final int UPDATE_LAST_SEQ_ID_BATCH_SIZE = 1000;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  // The sleep interval when waiting table to be enabled or disabled.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  protected static final int SLEEP_INTERVAL_MS = 1000;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  protected ModifyPeerProcedure() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  protected ModifyPeerProcedure(String peerId) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    super(peerId);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Called before we start the actual processing. The implementation should call the pre CP hook,<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * and also the pre-check for the peer modification.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * If an IOException is thrown then we will give up and mark the procedure as failed directly. If<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * all checks passes then the procedure can not be rolled back any more.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  protected abstract void prePeerModification(MasterProcedureEnv env)<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      throws IOException, ReplicationException, InterruptedException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  protected abstract void updatePeerStorage(MasterProcedureEnv env) throws ReplicationException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  /**<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * Called before we finish the procedure. The implementation can do some logging work, and also<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * call the coprocessor hook if any.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * &lt;p&gt;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * Notice that, since we have already done the actual work, throwing {@code IOException} here will<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * not fail this procedure, we will just ignore it and finish the procedure as suceeded. If<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * {@code ReplicationException} is thrown we will retry since this usually means we fails to<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * update the peer storage.<a name="line.89"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.TableName;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.master.TableStateManager;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.master.TableStateManager.TableStateNotFoundException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.procedure.ReopenTableRegionsProcedure;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * The base class for all replication peer related procedure except sync replication state<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * transition.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public abstract class ModifyPeerProcedure extends AbstractPeerProcedure&lt;PeerModificationState&gt; {<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ModifyPeerProcedure.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  protected ModifyPeerProcedure() {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  protected ModifyPeerProcedure(String peerId) {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    super(peerId);<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * Called before we start the actual processing. The implementation should call the pre CP hook,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * and also the pre-check for the peer modification.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * &lt;p&gt;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * If an IOException is thrown then we will give up and mark the procedure as failed directly. If<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * all checks passes then the procedure can not be rolled back any more.<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  protected abstract void prePeerModification(MasterProcedureEnv env)<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      throws IOException, ReplicationException, InterruptedException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  protected abstract void updatePeerStorage(MasterProcedureEnv env) throws ReplicationException;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * Called before we finish the procedure. The implementation can do some logging work, and also<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * call the coprocessor hook if any.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * &lt;p&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * Notice that, since we have already done the actual work, throwing {@code IOException} here will<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * not fail this procedure, we will just ignore it and finish the procedure as suceeded. If<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * {@code ReplicationException} is thrown we will retry since this usually means we fails to<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * update the peer storage.<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected abstract void postPeerModification(MasterProcedureEnv env)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      throws IOException, ReplicationException;<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected void releaseLatch(MasterProcedureEnv env) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    ProcedurePrepareLatch.releaseLatch(latch, this);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  /**<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * Implementation class can override this method. By default we will jump to<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * POST_PEER_MODIFICATION and finish the procedure.<a name="line.89"></a>
 <span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected abstract void postPeerModification(MasterProcedureEnv env)<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      throws IOException, ReplicationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected void releaseLatch(MasterProcedureEnv env) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    ProcedurePrepareLatch.releaseLatch(latch, this);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Implementation class can override this method. By default we will jump to<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * POST_PEER_MODIFICATION and finish the procedure.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  protected PeerModificationState nextStateAfterRefresh() {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    return PeerModificationState.POST_PEER_MODIFICATION;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  }<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>   * The implementation class should override this method if the procedure may enter the serial<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * related states.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected boolean enablePeerBeforeFinish() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    throw new UnsupportedOperationException();<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>  protected ReplicationPeerConfig getOldPeerConfig() {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return null;<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>  protected ReplicationPeerConfig getNewPeerConfig() {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    throw new UnsupportedOperationException();<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>  protected void updateLastPushedSequenceIdForSerialPeer(MasterProcedureEnv env)<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      throws IOException, ReplicationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    throw new UnsupportedOperationException();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // If the table is in enabling state, we need to wait until it is enabled and then reopen all its<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // regions.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private boolean needReopen(TableStateManager tsm, TableName tn) throws IOException {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    for (;;) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      try {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        TableState state = tsm.getTableState(tn);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        if (state.isEnabled()) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          return true;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        if (!state.isEnabling()) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          return false;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        Thread.sleep(SLEEP_INTERVAL_MS);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      } catch (TableStateNotFoundException e) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        return false;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      } catch (InterruptedException e) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        throw (IOException) new InterruptedIOException(e.getMessage()).initCause(e);<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>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  // will be override in test to simulate error<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  @VisibleForTesting<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  protected void reopenRegions(MasterProcedureEnv env) throws IOException {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    ReplicationPeerConfig peerConfig = getNewPeerConfig();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    ReplicationPeerConfig oldPeerConfig = getOldPeerConfig();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    for (TableDescriptor td : env.getMasterServices().getTableDescriptors().getAll().values()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      if (!td.hasGlobalReplicationScope()) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        continue;<a name="line.156"></a>
+<span class="sourceLineNo">091</span>  protected PeerModificationState nextStateAfterRefresh() {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    return PeerModificationState.POST_PEER_MODIFICATION;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<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>   * The implementation class should override this method if the procedure may enter the serial<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * related states.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected boolean enablePeerBeforeFinish() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    throw new UnsupportedOperationException();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected ReplicationPeerConfig getOldPeerConfig() {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    return null;<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>  protected ReplicationPeerConfig getNewPeerConfig() {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    throw new UnsupportedOperationException();<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>  protected void updateLastPushedSequenceIdForSerialPeer(MasterProcedureEnv env)<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throws IOException, ReplicationException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    throw new UnsupportedOperationException();<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>  // If the table is in enabling state, we need to wait until it is enabled and then reopen all its<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  // regions.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private boolean needReopen(TableStateManager tsm, TableName tn) throws IOException {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    for (;;) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      try {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        TableState state = tsm.getTableState(tn);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        if (state.isEnabled()) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          return true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        if (!state.isEnabling()) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          return false;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        Thread.sleep(SLEEP_INTERVAL_MS);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      } catch (TableStateNotFoundException e) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        return false;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      } catch (InterruptedException e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        throw (IOException) new InterruptedIOException(e.getMessage()).initCause(e);<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>  }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  // will be override in test to simulate error<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  @VisibleForTesting<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  protected void reopenRegions(MasterProcedureEnv env) throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    ReplicationPeerConfig peerConfig = getNewPeerConfig();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    ReplicationPeerConfig oldPeerConfig = getOldPeerConfig();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    for (TableDescriptor td : env.getMasterServices().getTableDescriptors().getAll().values()) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      if (!td.hasGlobalReplicationScope()) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        continue;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      TableName tn = td.getTableName();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      if (!ReplicationUtils.contains(peerConfig, tn)) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        continue;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      if (oldPeerConfig != null &amp;&amp; oldPeerConfig.isSerial() &amp;&amp;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        ReplicationUtils.contains(oldPeerConfig, tn)) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        continue;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      if (needReopen(tsm, tn)) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        addChildProcedure(new ReopenTableRegionsProcedure(tn));<a name="line.156"></a>
 <span class="sourceLineNo">157</span>      }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      TableName tn = td.getTableName();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      if (!ReplicationUtils.contains(peerConfig, tn)) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        continue;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      if (oldPeerConfig != null &amp;&amp; oldPeerConfig.isSerial() &amp;&amp;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        ReplicationUtils.contains(oldPeerConfig, tn)) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        continue;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      if (needReopen(tsm, tn)) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        addChildProcedure(new ReopenTableRegionsProcedure(tn));<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><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  private void addToMap(Map&lt;String, Long&gt; lastSeqIds, String encodedRegionName, long barrier,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      ReplicationQueueStorage queueStorage) throws ReplicationException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (barrier &gt;= 0) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      lastSeqIds.put(encodedRegionName, barrier);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (lastSeqIds.size() &gt;= UPDATE_LAST_SEQ_ID_BATCH_SIZE) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        queueStorage.setLastSequenceIds(peerId, lastSeqIds);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        lastSeqIds.clear();<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>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected final void setLastPushedSequenceId(MasterProcedureEnv env,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      ReplicationPeerConfig peerConfig) throws IOException, ReplicationException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    Map&lt;String, Long&gt; lastSeqIds = new HashMap&lt;String, Long&gt;();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    for (TableDescriptor td : env.getMasterServices().getTableDescriptors().getAll().values()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (!td.hasGlobalReplicationScope()) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        continue;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      TableName tn = td.getTableName();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (!ReplicationUtils.contains(peerConfig, tn)) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      setLastPushedSequenceIdForTable(env, tn, lastSeqIds);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (!lastSeqIds.isEmpty()) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      env.getReplicationPeerManager().getQueueStorage().setLastSequenceIds(peerId, lastSeqIds);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  // If the table is currently disabling, then we need to wait until it is disabled.We will write<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // replication barrier for a disabled table. And return whether we need to update the last pushed<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  // sequence id, if the table has been deleted already, i.e, we hit TableStateNotFoundException,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // then we do not need to update last pushed sequence id for this table.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private boolean needSetLastPushedSequenceId(TableStateManager tsm, TableName tn)<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      throws IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (;;) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      try {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        if (!tsm.getTableState(tn).isDisabling()) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          return true;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        Thread.sleep(SLEEP_INTERVAL_MS);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      } catch (TableStateNotFoundException e) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        return false;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      } catch (InterruptedException e) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        throw (IOException) new InterruptedIOException(e.getMessage()).initCause(e);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  // Will put the encodedRegionName-&gt;lastPushedSeqId pair into the map passed in, if the map is<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  // large enough we will call queueStorage.setLastSequenceIds and clear the map. So the caller<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  // should not forget to check whether the map is empty at last, if not you should call<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  // queueStorage.setLastSequenceIds to write out the remaining entries in the map.<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  protected final void setLastPushedSequenceIdForTable(MasterProcedureEnv env, TableName tableName,<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      Map&lt;String, Long&gt; lastSeqIds) throws IOException, ReplicationException {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    ReplicationQueueStorage queueStorage = env.getReplicationPeerManager().getQueueStorage();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    Connection conn = env.getMasterServices().getConnection();<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (!needSetLastPushedSequenceId(tsm, tableName)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      LOG.debug("Skip settting last pushed sequence id for {}", tableName);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      return;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    for (Pair&lt;String, Long&gt; name2Barrier : MetaTableAccessor<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      .getTableEncodedRegionNameAndLastBarrier(conn, tableName)) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      LOG.trace("Update last pushed sequence id for {}, {}", tableName, name2Barrier);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      addToMap(lastSeqIds, name2Barrier.getFirst(), name2Barrier.getSecond().longValue() - 1,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        queueStorage);<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><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      throws ProcedureSuspendedException, InterruptedException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    switch (state) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      case PRE_PEER_MODIFICATION:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          prePeerModification(env);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          releaseLatch(env);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          return Flow.NO_MORE_STATE;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        } catch (ReplicationException e) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          LOG.warn("{} failed to call prePeerModification for peer {}, sleep {} secs",<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          throw suspend(backoff);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        attempts = 0;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        return Flow.HAS_MORE_STATE;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      case UPDATE_PEER_STORAGE:<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        try {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          updatePeerStorage(env);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        } catch (ReplicationException e) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>          LOG.warn("{} update peer storage for peer {} failed, sleep {} secs", getClass().getName(),<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            peerId, backoff / 1000, e);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          throw suspend(backoff);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        attempts = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        return Flow.HAS_MORE_STATE;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      case REFRESH_PEER_ON_RS:<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        refreshPeer(env, getPeerOperationType());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        setNextState(nextStateAfterRefresh());<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        return Flow.HAS_MORE_STATE;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      case SERIAL_PEER_REOPEN_REGIONS:<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        try {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>          reopenRegions(env);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        } catch (Exception e) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          LOG.warn("{} reopen regions for peer {} failed,  sleep {} secs", getClass().getName(),<a name="line.285"></a>
-<span class="sourceLineNo">286</span>            peerId, backoff / 1000, e);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>          throw suspend(backoff);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        attempts = 0;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        setNextState(PeerModificationState.SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        return Flow.HAS_MORE_STATE;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      case SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID:<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        try {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          updateLastPushedSequenceIdForSerialPeer(env);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        } catch (Exception e) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          LOG.warn("{} set last sequence id for peer {} failed,  sleep {} secs",<a name="line.297"></a>
-<span class="sourceLineNo">298</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          throw suspend(backoff);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        attempts = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        setNextState(enablePeerBeforeFinish() ? PeerModificationState.SERIAL_PEER_SET_PEER_ENABLED<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          : PeerModificationState.POST_PEER_MODIFICATION);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        return Flow.HAS_MORE_STATE;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      case SERIAL_PEER_SET_PEER_ENABLED:<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        try {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          enablePeer(env);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        } catch (ReplicationException e) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          LOG.warn("{} enable peer before finish for peer {} failed,  sleep {} secs",<a name="line.310"></a>
-<span class="sourceLineNo">311</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          throw suspend(backoff);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        attempts = 0;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        setNextState(PeerModificationState.SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS);<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 SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        refreshPeer(env, PeerOperationType.ENABLE);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        setNextState(PeerModificationState.POST_PEER_MODIFICATION);<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 POST_PEER_MODIFICATION:<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        try {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          postPeerModification(env);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        } catch (ReplicationException e) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          LOG.warn("{} failed to call postPeerModification for peer {},  sleep {} secs",<a name="line.326"></a>
-<span class="sourceLineNo">327</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          throw suspend(backoff);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        } catch (IOException e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.330"></a>
-<span class="sourceLineNo">331</span>            "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        releaseLatch(env);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return Flow.NO_MORE_STATE;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      default:<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        throw new UnsupportedOperationException("unhandled state=" + state);<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>  @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  protected PeerModificationState getState(int stateId) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    return PeerModificationState.forNumber(stateId);<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>  @Override<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  protected int getStateId(PeerModificationState state) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return state.getNumber();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  @Override<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  protected PeerModificationState getInitialState() {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    return PeerModificationState.PRE_PEER_MODIFICATION;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>}<a name="line.354"></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>  @Override<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      throws ProcedureSuspendedException, InterruptedException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    switch (state) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      case PRE_PEER_MODIFICATION:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        try {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          prePeerModification(env);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        } catch (IOException e) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.169"></a>
+<span class="sourceLineNo">170</span>            "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>          setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          releaseLatch(env);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>          return Flow.NO_MORE_STATE;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        } catch (ReplicationException e) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>          LOG.warn("{} failed to call prePeerModification for peer {}, sleep {} secs",<a name="line.176"></a>
+<span class="sourceLineNo">177</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          throw suspend(backoff);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        attempts = 0;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        return Flow.HAS_MORE_STATE;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      case UPDATE_PEER_STORAGE:<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        try {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          updatePeerStorage(env);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        } catch (ReplicationException e) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          LOG.warn("{} update peer storage for peer {} failed, sleep {} secs", getClass().getName(),<a name="line.188"></a>
+<span class="sourceLineNo">189</span>            peerId, backoff / 1000, e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>          throw suspend(backoff);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        attempts = 0;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        return Flow.HAS_MORE_STATE;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      case REFRESH_PEER_ON_RS:<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        refreshPeer(env, getPeerOperationType());<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        setNextState(nextStateAfterRefresh());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        return Flow.HAS_MORE_STATE;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      case SERIAL_PEER_REOPEN_REGIONS:<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        try {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          reopenRegions(env);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        } catch (Exception e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          LOG.warn("{} reopen regions for peer {} failed,  sleep {} secs", getClass().getName(),<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            peerId, backoff / 1000, e);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          throw suspend(backoff);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        attempts = 0;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        setNextState(PeerModificationState.SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        return Flow.HAS_MORE_STATE;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      case SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID:<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          updateLastPushedSequenceIdForSerialPeer(env);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        } catch (Exception e) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          LOG.warn("{} set last sequence id for peer {} failed,  sleep {} secs",<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          throw suspend(backoff);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        attempts = 0;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        setNextState(enablePeerBeforeFinish() ? PeerModificationState.SERIAL_PEER_SET_PEER_ENABLED<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          : PeerModificationState.POST_PEER_MODIFICATION);<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>      case SERIAL_PEER_SET_PEER_ENABLED:<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        try {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          enablePeer(env);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        } catch (ReplicationException e) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          LOG.warn("{} enable peer before finish for peer {} failed,  sleep {} secs",<a name="line.229"></a>
+<span class="sourceLineNo">230</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          throw suspend(backoff);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        attempts = 0;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        setNextState(PeerModificationState.SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        return Flow.HAS_MORE_STATE;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      case SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        refreshPeer(env, PeerOperationType.ENABLE);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        return Flow.HAS_MORE_STATE;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      case POST_PEER_MODIFICATION:<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        try {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          postPeerModification(env);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        } catch (ReplicationException e) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          LOG.warn("{} failed to call postPeerModification for peer {},  sleep {} secs",<a name="line.245"></a>
+<span class="sourceLineNo">246</span>            getClass().getName(), peerId, backoff / 1000, e);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          throw suspend(backoff);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        } catch (IOException e) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        releaseLatch(env);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return Flow.NO_MORE_STATE;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      default:<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  @Override<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  protected PeerModificationState getState(int stateId) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return PeerModificationState.forNumber(stateId);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected int getStateId(PeerModificationState state) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return state.getNumber();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  protected PeerModificationState getInitialState() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return PeerModificationState.PRE_PEER_MODIFICATION;<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>
 
 
 


[25/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
index 34da502..968977c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -133,7 +133,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.32">AbstractPeerProcedure</a>&lt;TState&gt;
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.48">AbstractPeerProcedure</a>&lt;TState&gt;
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a>&lt;TState&gt;
 implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></pre>
 <div class="block">The base class for all replication peer related procedure.</div>
@@ -188,6 +188,18 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -254,30 +266,53 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 </td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
+        <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;encodedRegionName,
+        long&nbsp;barrier,
+        <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</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 id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</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">Used to keep the procedure lock even when the procedure is yielding or suspended.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">needSetLastPushedSequenceId</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
+                           <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</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/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a>&nbsp;type)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</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 user should override this method, and release lock if necessary.</div>
 </td>
 </tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</code>&nbsp;</td>
+</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/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -328,13 +363,48 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <!--   -->
 </a>
 <h3>Field Detail</h3>
+<a name="LOG">
+<!--   -->
+</a>
+<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/replication/AbstractPeerProcedure.html#line.51">LOG</a></pre>
+</li>
+</ul>
+<a name="UPDATE_LAST_SEQ_ID_BATCH_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UPDATE_LAST_SEQ_ID_BATCH_SIZE</h4>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.53">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure.UPDATE_LAST_SEQ_ID_BATCH_SIZE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="SLEEP_INTERVAL_MS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SLEEP_INTERVAL_MS</h4>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.56">SLEEP_INTERVAL_MS</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure.SLEEP_INTERVAL_MS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="latch">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>latch</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.36">latch</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.59">latch</a></pre>
 </li>
 </ul>
 </li>
@@ -351,7 +421,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>AbstractPeerProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.38">AbstractPeerProcedure</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.61">AbstractPeerProcedure</a>()</pre>
 </li>
 </ul>
 <a name="AbstractPeerProcedure-java.lang.String-">
@@ -360,7 +430,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AbstractPeerProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.41">AbstractPeerProcedure</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;peerId)</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.64">AbstractPeerProcedure</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;peerId)</pre>
 </li>
 </ul>
 </li>
@@ -377,7 +447,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLatch</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.46">getLatch</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.69">getLatch</a>()</pre>
 </li>
 </ul>
 <a name="acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -386,7 +456,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireLock</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.51">acquireLock</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/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.74">acquireLock</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#acquireLock-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The user should override this method if they need a lock on an Entity. A lock can be anything,
  and it is up to the implementor. The Procedure Framework will call this method just before it
@@ -423,7 +493,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseLock</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.59">releaseLock</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;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.82">releaseLock</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#releaseLock-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">The user should override this method, and release lock if necessary.</div>
 <dl>
@@ -438,7 +508,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>holdLock</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.64">holdLock</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/replication/AbstractPeerProcedure.html#line.87">holdLock</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#holdLock-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.</div>
 <dl>
@@ -455,17 +525,17 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshPeer</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.68">refreshPeer</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 final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.91">refreshPeer</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/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a>&nbsp;type)</pre>
 </li>
 </ul>
 <a name="enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>enablePeer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.75">enablePeer</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/replication/AbstractPeerProcedure.html#line.98">enablePeer</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/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -473,6 +543,73 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 </dl>
 </li>
 </ul>
+<a name="addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addToMap</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.102">addToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds,
+                      <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;encodedRegionName,
+                      long&nbsp;barrier,
+                      <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a>&nbsp;queueStorage)
+               throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setLastPushedSequenceId</h4>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.113">setLastPushedSequenceId</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/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)
+                                      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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</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>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="needSetLastPushedSequenceId-org.apache.hadoop.hbase.master.TableStateManager-org.apache.hadoop.hbase.TableName-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>needSetLastPushedSequenceId</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.135">needSetLastPushedSequenceId</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;tsm,
+                                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tn)
+                                     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="setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>setLastPushedSequenceIdForTable</h4>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.155">setLastPushedSequenceIdForTable</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</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;lastSeqIds)
+                                              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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</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>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
index 444a3ef..9436571 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
@@ -203,18 +203,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -338,14 +331,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedu
 re.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedu
 re.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
index 1813300..346d41f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
@@ -195,18 +195,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -303,14 +296,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../.
 ./../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a hr
 ef="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../.
 ./../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
index 3b35ffa..ce96c18 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
@@ -195,18 +195,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#SLEEP_INTERVAL_MS">SLEEP_INTERVAL_MS</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#UPDATE_LAST_SEQ_ID_BATCH_SIZE">UPDATE_LAST_SEQ_ID_BATCH_SIZE</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">
@@ -303,14 +296,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../.
 ./../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a hr
 ef="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#enablePeerBeforeFinish--">enablePeerBeforeFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getNewPeerConfig--">getNewPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getOldPeerConfig--">getOldPeerConfig</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../.
 ./../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#nextStateAfterRefresh--">nextStateAfterRefresh</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#reopenRegions-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">reopenRegions</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updateLastPushedSequenceIdForSerialPeer</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#enablePeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">enablePeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#refreshPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface.PeerOperationType-">refreshPeer</a>, <a href="../../../../../../org/apache/hado
 op/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceId-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">setLastPushedSequenceId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#setLastPushedSequenceIdForTable-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-java.util.Map-">setLastPushedSequenceIdForTable</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerNoLockProcedure">


[02/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
index abf2b80..6b41a62 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
@@ -74,7 +74,7 @@
 <span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResultImpl;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.regionserver.HRegion.PrepareFlushResult;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.69"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.70"></a>
 <span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManagerTestHelper;<a name="line.72"></a>
@@ -88,1628 +88,1638 @@
 <span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.wal.WALSplitter.MutationReplay;<a name="line.80"></a>
 <span class="sourceLineNo">081</span>import org.apache.hadoop.util.StringUtils;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>import org.junit.After;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.junit.Before;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.junit.ClassRule;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.junit.Rule;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.junit.Test;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.junit.experimental.categories.Category;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.junit.rules.TestName;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.mockito.Mockito;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.slf4j.Logger;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.slf4j.LoggerFactory;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor.FlushAction;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor.StoreFlushDescriptor;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor.EventType;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<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> * Tests of HRegion methods for replaying flush, compaction, region open, etc events for secondary<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * region replicas<a name="line.109"></a>
-<span class="sourceLineNo">110</span> */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>@Category(MediumTests.class)<a name="line.111"></a>
-<span class="sourceLineNo">112</span>public class TestHRegionReplayEvents {<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  @ClassRule<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      HBaseClassTestRule.forClass(TestHRegionReplayEvents.class);<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHRegion.class);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Rule public TestName name = new TestName();<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.121"></a>
+<span class="sourceLineNo">083</span>import org.junit.AfterClass;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.junit.Before;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.junit.BeforeClass;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.junit.ClassRule;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.junit.Rule;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.junit.Test;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.junit.experimental.categories.Category;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.junit.rules.TestName;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.mockito.Mockito;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.slf4j.Logger;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.slf4j.LoggerFactory;<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor.FlushAction;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor.StoreFlushDescriptor;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor.EventType;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<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> * Tests of HRegion methods for replaying flush, compaction, region open, etc events for secondary<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * region replicas<a name="line.111"></a>
+<span class="sourceLineNo">112</span> */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>@Category(LargeTests.class)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>public class TestHRegionReplayEvents {<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @ClassRule<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      HBaseClassTestRule.forClass(TestHRegionReplayEvents.class);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHRegion.class);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  @Rule public TestName name = new TestName();<a name="line.121"></a>
 <span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public static Configuration CONF ;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private String dir;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private byte[][] families = new byte[][] {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      Bytes.toBytes("cf1"), Bytes.toBytes("cf2"), Bytes.toBytes("cf3")};<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // Test names<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  protected byte[] tableName;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  protected String method;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  protected final byte[] row = Bytes.toBytes("rowA");<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  protected final byte[] row2 = Bytes.toBytes("rowB");<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  protected byte[] cq = Bytes.toBytes("cq");<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // per test fields<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private Path rootDir;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private TableDescriptor htd;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private long time;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private RegionServerServices rss;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private RegionInfo primaryHri, secondaryHri;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private HRegion primaryRegion, secondaryRegion;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private WALFactory wals;<a name="line.143"></a>
+<span class="sourceLineNo">123</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static Configuration CONF;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private String dir;<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private byte[][] families = new byte[][] {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      Bytes.toBytes("cf1"), Bytes.toBytes("cf2"), Bytes.toBytes("cf3")};<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // Test names<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  protected byte[] tableName;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  protected String method;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  protected final byte[] row = Bytes.toBytes("rowA");<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  protected final byte[] row2 = Bytes.toBytes("rowB");<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  protected byte[] cq = Bytes.toBytes("cq");<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  // per test fields<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private Path rootDir;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private TableDescriptor htd;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  private RegionServerServices rss;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private RegionInfo primaryHri, secondaryHri;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private HRegion primaryRegion, secondaryRegion;<a name="line.143"></a>
 <span class="sourceLineNo">144</span>  private WAL walPrimary, walSecondary;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>  private WAL.Reader reader;<a name="line.145"></a>
 <span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @Before<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void setup() throws IOException {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    TEST_UTIL = HBaseTestingUtility.createLocalHTU();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    CONF = TEST_UTIL.getConfiguration();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    dir = TEST_UTIL.getDataTestDir("TestHRegionReplayEvents").toString();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    method = name.getMethodName();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    tableName = Bytes.toBytes(name.getMethodName());<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    rootDir = new Path(dir + method);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    TEST_UTIL.getConfiguration().set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    method = name.getMethodName();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(TableName.valueOf(method));<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    for (byte[] family : families) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    htd = builder.build();<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    time = System.currentTimeMillis();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    ChunkCreator.initialize(MemStoreLABImpl.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    primaryHri =<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        RegionInfoBuilder.newBuilder(htd.getTableName()).setRegionId(time).setReplicaId(0).build();<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    secondaryHri =<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        RegionInfoBuilder.newBuilder(htd.getTableName()).setRegionId(time).setReplicaId(1).build();<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    wals = TestHRegion.createWALFactory(CONF, rootDir);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    walPrimary = wals.getWAL(primaryHri);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    walSecondary = wals.getWAL(secondaryHri);<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    rss = mock(RegionServerServices.class);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    when(rss.getServerName()).thenReturn(ServerName.valueOf("foo", 1, 1));<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    when(rss.getConfiguration()).thenReturn(CONF);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    when(rss.getRegionServerAccounting()).thenReturn(new RegionServerAccounting(CONF));<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    String string = org.apache.hadoop.hbase.executor.EventType.RS_COMPACTED_FILES_DISCHARGER<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        .toString();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    ExecutorService es = new ExecutorService(string);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    es.startExecutorService(<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      string+"-"+string, 1);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    when(rss.getExecutorService()).thenReturn(es);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    primaryRegion = HRegion.createHRegion(primaryHri, rootDir, CONF, htd, walPrimary);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    primaryRegion.close();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    List&lt;HRegion&gt; regions = new ArrayList&lt;&gt;();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    regions.add(primaryRegion);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    Mockito.doReturn(regions).when(rss).getRegions();<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    primaryRegion = HRegion.openHRegion(rootDir, primaryHri, htd, walPrimary, CONF, rss, null);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    secondaryRegion = HRegion.openHRegion(secondaryHri, htd, null, CONF, rss, null);<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    reader = null;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  @After<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public void tearDown() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (reader != null) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      reader.close();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">147</span>  @BeforeClass<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public static void setUpBeforeClass() throws Exception {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    TEST_UTIL = new HBaseTestingUtility();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @AfterClass<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static void tearDownAfterClass() throws Exception {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    LOG.info("Cleaning test directory: " + TEST_UTIL.getDataTestDir());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    TEST_UTIL.cleanupTestDir();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    TEST_UTIL.shutdownMiniDFSCluster();<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>  @Before<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  public void setUp() throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    CONF = TEST_UTIL.getConfiguration();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    dir = TEST_UTIL.getDataTestDir("TestHRegionReplayEvents").toString();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    method = name.getMethodName();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    tableName = Bytes.toBytes(name.getMethodName());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    rootDir = new Path(dir + method);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    TEST_UTIL.getConfiguration().set(HConstants.HBASE_DIR, rootDir.toString());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    method = name.getMethodName();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(TableName.valueOf(method));<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    for (byte[] family : families) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      builder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family));<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    htd = builder.build();<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    long time = System.currentTimeMillis();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    ChunkCreator.initialize(MemStoreLABImpl.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    primaryHri =<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        RegionInfoBuilder.newBuilder(htd.getTableName()).setRegionId(time).setReplicaId(0).build();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    secondaryHri =<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        RegionInfoBuilder.newBuilder(htd.getTableName()).setRegionId(time).setReplicaId(1).build();<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>    WALFactory wals = TestHRegion.createWALFactory(CONF, rootDir);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    walPrimary = wals.getWAL(primaryHri);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    walSecondary = wals.getWAL(secondaryHri);<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>    rss = mock(RegionServerServices.class);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    when(rss.getServerName()).thenReturn(ServerName.valueOf("foo", 1, 1));<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    when(rss.getConfiguration()).thenReturn(CONF);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    when(rss.getRegionServerAccounting()).thenReturn(new RegionServerAccounting(CONF));<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    String string = org.apache.hadoop.hbase.executor.EventType.RS_COMPACTED_FILES_DISCHARGER<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        .toString();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    ExecutorService es = new ExecutorService(string);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    es.startExecutorService(<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      string+"-"+string, 1);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    when(rss.getExecutorService()).thenReturn(es);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    primaryRegion = HRegion.createHRegion(primaryHri, rootDir, CONF, htd, walPrimary);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    primaryRegion.close();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    List&lt;HRegion&gt; regions = new ArrayList&lt;&gt;();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    regions.add(primaryRegion);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    Mockito.doReturn(regions).when(rss).getRegions();<a name="line.200"></a>
 <span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    if (primaryRegion != null) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      HBaseTestingUtility.closeRegionAndWAL(primaryRegion);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (secondaryRegion != null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      HBaseTestingUtility.closeRegionAndWAL(secondaryRegion);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    EnvironmentEdgeManagerTestHelper.reset();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    LOG.info("Cleaning test directory: " + TEST_UTIL.getDataTestDir());<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    TEST_UTIL.cleanupTestDir();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">202</span>    primaryRegion = HRegion.openHRegion(rootDir, primaryHri, htd, walPrimary, CONF, rss, null);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    secondaryRegion = HRegion.openHRegion(secondaryHri, htd, null, CONF, rss, null);<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>    reader = null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @After<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void tearDown() throws Exception {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    if (reader != null) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      reader.close();<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>  String getName() {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return name.getMethodName();<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  // Some of the test cases are as follows:<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // 1. replay flush start marker again<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  // 2. replay flush with smaller seqId than what is there in memstore snapshot<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  // 3. replay flush with larger seqId than what is there in memstore snapshot<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  // 4. replay flush commit without flush prepare. non droppable memstore<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  // 5. replay flush commit without flush prepare. droppable memstore<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  // 6. replay open region event<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  // 7. replay open region event after flush start<a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // 8. replay flush form an earlier seqId (test ignoring seqIds)<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  // 9. start flush does not prevent region from closing.<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  @Test<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public void testRegionReplicaSecondaryCannotFlush() throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // load some data and flush ensure that the secondary replica will not execute the flush<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    // load some data to secondary by replaying<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    putDataByReplay(secondaryRegion, 0, 1000, cq, families);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    verifyData(secondaryRegion, 0, 1000, cq, families);<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>    // flush region<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    FlushResultImpl flush = (FlushResultImpl)secondaryRegion.flush(true);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertEquals(FlushResultImpl.Result.CANNOT_FLUSH, flush.result);<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    verifyData(secondaryRegion, 0, 1000, cq, families);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // close the region, and inspect that it has not flushed<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    Map&lt;byte[], List&lt;HStoreFile&gt;&gt; files = secondaryRegion.close(false);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // assert that there are no files (due to flush)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    for (List&lt;HStoreFile&gt; f : files.values()) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      assertTrue(f.isEmpty());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">214</span>    if (primaryRegion != null) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      HBaseTestingUtility.closeRegionAndWAL(primaryRegion);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    if (secondaryRegion != null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      HBaseTestingUtility.closeRegionAndWAL(secondaryRegion);<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>    EnvironmentEdgeManagerTestHelper.reset();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  String getName() {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return name.getMethodName();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  // Some of the test cases are as follows:<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  // 1. replay flush start marker again<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  // 2. replay flush with smaller seqId than what is there in memstore snapshot<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  // 3. replay flush with larger seqId than what is there in memstore snapshot<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  // 4. replay flush commit without flush prepare. non droppable memstore<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  // 5. replay flush commit without flush prepare. droppable memstore<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  // 6. replay open region event<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  // 7. replay open region event after flush start<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  // 8. replay flush form an earlier seqId (test ignoring seqIds)<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  // 9. start flush does not prevent region from closing.<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  @Test<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public void testRegionReplicaSecondaryCannotFlush() throws IOException {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    // load some data and flush ensure that the secondary replica will not execute the flush<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // load some data to secondary by replaying<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    putDataByReplay(secondaryRegion, 0, 1000, cq, families);<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>    verifyData(secondaryRegion, 0, 1000, cq, families);<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // flush region<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    FlushResultImpl flush = (FlushResultImpl)secondaryRegion.flush(true);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    assertEquals(FlushResultImpl.Result.CANNOT_FLUSH, flush.result);<a name="line.250"></a>
 <span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  /**<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * Tests a case where we replay only a flush start marker, then the region is closed. This region<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * should not block indefinitely<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  @Test<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  public void testOnlyReplayingFlushStartDoesNotHoldUpRegionClose() throws IOException {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    // load some data to primary and flush<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    int start = 0;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    LOG.info("-- Writing some data to primary from " +  start + " to " + (start+100));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    putData(primaryRegion, Durability.SYNC_WAL, start, 100, cq, families);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    LOG.info("-- Flushing primary, creating 3 files for 3 stores");<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    primaryRegion.flush(true);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    // now replay the edits and the flush marker<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    reader = createWALReaderForPrimary();<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>    LOG.info("-- Replaying edits and flush events in secondary");<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    while (true) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      WAL.Entry entry = reader.next();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      if (entry == null) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        break;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      FlushDescriptor flushDesc<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        = WALEdit.getFlushDescriptor(entry.getEdit().getCells().get(0));<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if (flushDesc != null) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        if (flushDesc.getAction() == FlushAction.START_FLUSH) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          LOG.info("-- Replaying flush start in secondary");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          secondaryRegion.replayWALFlushStartMarker(flushDesc);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        } else if (flushDesc.getAction() == FlushAction.COMMIT_FLUSH) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          LOG.info("-- NOT Replaying flush commit in secondary");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      } else {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        replayEdit(secondaryRegion, entry);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>    assertTrue(rss.getRegionServerAccounting().getGlobalMemStoreDataSize() &gt; 0);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    // now close the region which should not cause hold because of un-committed flush<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    secondaryRegion.close();<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>    // verify that the memstore size is back to what it was<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    assertEquals(0, rss.getRegionServerAccounting().getGlobalMemStoreDataSize());<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>  static int replayEdit(HRegion region, WAL.Entry entry) throws IOException {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (WALEdit.isMetaEditFamily(entry.getEdit().getCells().get(0))) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      return 0; // handled elsewhere<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    Put put = new Put(CellUtil.cloneRow(entry.getEdit().getCells().get(0)));<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    for (Cell cell : entry.getEdit().getCells()) put.add(cell);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    put.setDurability(Durability.SKIP_WAL);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    MutationReplay mutation = new MutationReplay(MutationType.PUT, put, 0, 0);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    region.batchReplay(new MutationReplay[] {mutation},<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      entry.getKey().getSequenceId());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return Integer.parseInt(Bytes.toString(put.getRow()));<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  WAL.Reader createWALReaderForPrimary() throws FileNotFoundException, IOException {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return WALFactory.createReader(TEST_UTIL.getTestFileSystem(),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      AbstractFSWALProvider.getCurrentFileName(walPrimary),<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      TEST_UTIL.getConfiguration());<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>  @Test<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public void testBatchReplayWithMultipleNonces() throws IOException {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    try {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      MutationReplay[] mutations = new MutationReplay[100];<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        put.setDurability(Durability.SYNC_WAL);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        for (byte[] familly : this.families) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          put.addColumn(familly, this.cq, null);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>          long nonceNum = i / 10;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          mutations[i] = new MutationReplay(MutationType.PUT, put, nonceNum, nonceNum);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      primaryRegion.batchReplay(mutations, 20);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    } catch (Exception e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      String msg = "Error while replay of batch with multiple nonces. ";<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      LOG.error(msg, e);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      fail(msg + e.getMessage());<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>  @Test<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  public void testReplayFlushesAndCompactions() throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // initiate a secondary region with some data.<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    // load some data to primary and flush. 3 flushes and some more unflushed data<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    putDataWithFlushes(primaryRegion, 100, 300, 100);<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    // compaction from primary<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    LOG.info("-- Compacting primary, only 1 store");<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    primaryRegion.compactStore(Bytes.toBytes("cf1"),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      NoLimitThroughputController.INSTANCE);<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>    // now replay the edits and the flush marker<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    reader = createWALReaderForPrimary();<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span>    LOG.info("-- Replaying edits and flush events in secondary");<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    int lastReplayed = 0;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    int expectedStoreFileCount = 0;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    while (true) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      WAL.Entry entry = reader.next();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      if (entry == null) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        break;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      FlushDescriptor flushDesc<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      = WALEdit.getFlushDescriptor(entry.getEdit().getCells().get(0));<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      CompactionDescriptor compactionDesc<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      = WALEdit.getCompaction(entry.getEdit().getCells().get(0));<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      if (flushDesc != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        // first verify that everything is replayed and visible before flush event replay<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        verifyData(secondaryRegion, 0, lastReplayed, cq, families);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        HStore store = secondaryRegion.getStore(Bytes.toBytes("cf1"));<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        long storeMemstoreSize = store.getMemStoreSize().getHeapSize();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>        long regionMemstoreSize = secondaryRegion.getMemStoreDataSize();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        MemStoreSize mss = store.getFlushableSize();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        long storeSize = store.getSize();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        long storeSizeUncompressed = store.getStoreSizeUncompressed();<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        if (flushDesc.getAction() == FlushAction.START_FLUSH) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.info("-- Replaying flush start in secondary");<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          PrepareFlushResult result = secondaryRegion.replayWALFlushStartMarker(flushDesc);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          assertNull(result.result);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          assertEquals(result.flushOpSeqId, flushDesc.getFlushSequenceNumber());<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>          // assert that the store memstore is smaller now<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          long newStoreMemstoreSize = store.getMemStoreSize().getHeapSize();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          LOG.info("Memstore size reduced by:"<a name="line.380"></a>
-<span class="sourceLineNo">381</span>              + StringUtils.humanReadableInt(newStoreMemstoreSize - storeMemstoreSize));<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          assertTrue(storeMemstoreSize &gt; newStoreMemstoreSize);<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>        } else if (flushDesc.getAction() == FlushAction.COMMIT_FLUSH) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          LOG.info("-- Replaying flush commit in secondary");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          secondaryRegion.replayWALFlushCommitMarker(flushDesc);<a name="line.386"></a>
+<span class="sourceLineNo">252</span>    verifyData(secondaryRegion, 0, 1000, cq, families);<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // close the region, and inspect that it has not flushed<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    Map&lt;byte[], List&lt;HStoreFile&gt;&gt; files = secondaryRegion.close(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    // assert that there are no files (due to flush)<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    for (List&lt;HStoreFile&gt; f : files.values()) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      assertTrue(f.isEmpty());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * Tests a case where we replay only a flush start marker, then the region is closed. This region<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * should not block indefinitely<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  @Test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  public void testOnlyReplayingFlushStartDoesNotHoldUpRegionClose() throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    // load some data to primary and flush<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    int start = 0;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    LOG.info("-- Writing some data to primary from " +  start + " to " + (start+100));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    putData(primaryRegion, Durability.SYNC_WAL, start, 100, cq, families);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    LOG.info("-- Flushing primary, creating 3 files for 3 stores");<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    primaryRegion.flush(true);<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    // now replay the edits and the flush marker<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    reader = createWALReaderForPrimary();<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>    LOG.info("-- Replaying edits and flush events in secondary");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    while (true) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      WAL.Entry entry = reader.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      if (entry == null) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        break;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      FlushDescriptor flushDesc<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        = WALEdit.getFlushDescriptor(entry.getEdit().getCells().get(0));<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      if (flushDesc != null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        if (flushDesc.getAction() == FlushAction.START_FLUSH) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          LOG.info("-- Replaying flush start in secondary");<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          secondaryRegion.replayWALFlushStartMarker(flushDesc);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        } else if (flushDesc.getAction() == FlushAction.COMMIT_FLUSH) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          LOG.info("-- NOT Replaying flush commit in secondary");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      } else {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>        replayEdit(secondaryRegion, entry);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>    assertTrue(rss.getRegionServerAccounting().getGlobalMemStoreDataSize() &gt; 0);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // now close the region which should not cause hold because of un-committed flush<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    secondaryRegion.close();<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>    // verify that the memstore size is back to what it was<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    assertEquals(0, rss.getRegionServerAccounting().getGlobalMemStoreDataSize());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  static int replayEdit(HRegion region, WAL.Entry entry) throws IOException {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    if (WALEdit.isMetaEditFamily(entry.getEdit().getCells().get(0))) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      return 0; // handled elsewhere<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    Put put = new Put(CellUtil.cloneRow(entry.getEdit().getCells().get(0)));<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    for (Cell cell : entry.getEdit().getCells()) put.add(cell);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    put.setDurability(Durability.SKIP_WAL);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    MutationReplay mutation = new MutationReplay(MutationType.PUT, put, 0, 0);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    region.batchReplay(new MutationReplay[] {mutation},<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      entry.getKey().getSequenceId());<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return Integer.parseInt(Bytes.toString(put.getRow()));<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>  WAL.Reader createWALReaderForPrimary() throws FileNotFoundException, IOException {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return WALFactory.createReader(TEST_UTIL.getTestFileSystem(),<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      AbstractFSWALProvider.getCurrentFileName(walPrimary),<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      TEST_UTIL.getConfiguration());<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>  @Test<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void testBatchReplayWithMultipleNonces() throws IOException {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      MutationReplay[] mutations = new MutationReplay[100];<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      for (int i = 0; i &lt; 100; i++) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        Put put = new Put(Bytes.toBytes(i));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        put.setDurability(Durability.SYNC_WAL);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        for (byte[] familly : this.families) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          put.addColumn(familly, this.cq, null);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          long nonceNum = i / 10;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          mutations[i] = new MutationReplay(MutationType.PUT, put, nonceNum, nonceNum);<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>      primaryRegion.batchReplay(mutations, 20);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    } catch (Exception e) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      String msg = "Error while replay of batch with multiple nonces. ";<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      LOG.error(msg, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      fail(msg + e.getMessage());<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>  @Test<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  public void testReplayFlushesAndCompactions() throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    // initiate a secondary region with some data.<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    // load some data to primary and flush. 3 flushes and some more unflushed data<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    putDataWithFlushes(primaryRegion, 100, 300, 100);<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // compaction from primary<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    LOG.info("-- Compacting primary, only 1 store");<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    primaryRegion.compactStore(Bytes.toBytes("cf1"),<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      NoLimitThroughputController.INSTANCE);<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>    // now replay the edits and the flush marker<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    reader = createWALReaderForPrimary();<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    LOG.info("-- Replaying edits and flush events in secondary");<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    int lastReplayed = 0;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    int expectedStoreFileCount = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    while (true) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      WAL.Entry entry = reader.next();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      if (entry == null) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        break;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      FlushDescriptor flushDesc<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      = WALEdit.getFlushDescriptor(entry.getEdit().getCells().get(0));<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      CompactionDescriptor compactionDesc<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      = WALEdit.getCompaction(entry.getEdit().getCells().get(0));<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      if (flushDesc != null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        // first verify that everything is replayed and visible before flush event replay<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        verifyData(secondaryRegion, 0, lastReplayed, cq, families);<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        HStore store = secondaryRegion.getStore(Bytes.toBytes("cf1"));<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        long storeMemstoreSize = store.getMemStoreSize().getHeapSize();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        long regionMemstoreSize = secondaryRegion.getMemStoreDataSize();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        MemStoreSize mss = store.getFlushableSize();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        long storeSize = store.getSize();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        long storeSizeUncompressed = store.getStoreSizeUncompressed();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        if (flushDesc.getAction() == FlushAction.START_FLUSH) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          LOG.info("-- Replaying flush start in secondary");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          PrepareFlushResult result = secondaryRegion.replayWALFlushStartMarker(flushDesc);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          assertNull(result.result);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          assertEquals(result.flushOpSeqId, flushDesc.getFlushSequenceNumber());<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>          // assert that the flush files are picked<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          expectedStoreFileCount++;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          for (HStore s : secondaryRegion.getStores()) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>            assertEquals(expectedStoreFileCount, s.getStorefilesCount());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>          }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>          MemStoreSize newMss = store.getFlushableSize();<a name="line.393"></a>
-<span class="sourceLineNo">394</span>          assertTrue(mss.getHeapSize() &gt; newMss.getHeapSize());<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // assert that the region memstore is smaller now<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          long newRegionMemstoreSize = secondaryRegion.getMemStoreDataSize();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          assertTrue(regionMemstoreSize &gt; newRegionMemstoreSize);<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>          // assert that the store sizes are bigger<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          assertTrue(store.getSize() &gt; storeSize);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>          assertTrue(store.getStoreSizeUncompressed() &gt; storeSizeUncompressed);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          assertEquals(store.getSize(), store.getStorefilesSize());<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        // after replay verify that everything is still visible<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        verifyData(secondaryRegion, 0, lastReplayed+1, cq, families);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      } else if (compactionDesc != null) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        secondaryRegion.replayWALCompactionMarker(compactionDesc, true, false, Long.MAX_VALUE);<a name="line.408"></a>
+<span class="sourceLineNo">388</span>          // assert that the store memstore is smaller now<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          long newStoreMemstoreSize = store.getMemStoreSize().getHeapSize();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          LOG.info("Memstore size reduced by:"<a name="line.390"></a>
+<span class="sourceLineNo">391</span>              + StringUtils.humanReadableInt(newStoreMemstoreSize - storeMemstoreSize));<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          assertTrue(storeMemstoreSize &gt; newStoreMemstoreSize);<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>        } else if (flushDesc.getAction() == FlushAction.COMMIT_FLUSH) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          LOG.info("-- Replaying flush commit in secondary");<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          secondaryRegion.replayWALFlushCommitMarker(flushDesc);<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>          // assert that the flush files are picked<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          expectedStoreFileCount++;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          for (HStore s : secondaryRegion.getStores()) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>            assertEquals(expectedStoreFileCount, s.getStorefilesCount());<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          MemStoreSize newMss = store.getFlushableSize();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          assertTrue(mss.getHeapSize() &gt; newMss.getHeapSize());<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>          // assert that the region memstore is smaller now<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          long newRegionMemstoreSize = secondaryRegion.getMemStoreDataSize();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          assertTrue(regionMemstoreSize &gt; newRegionMemstoreSize);<a name="line.408"></a>
 <span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>        // assert that the compaction is applied<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        for (HStore store : secondaryRegion.getStores()) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          if (store.getColumnFamilyName().equals("cf1")) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            assertEquals(1, store.getStorefilesCount());<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          } else {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            assertEquals(expectedStoreFileCount, store.getStorefilesCount());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      } else {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        lastReplayed = replayEdit(secondaryRegion, entry);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    assertEquals(400-1, lastReplayed);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    LOG.info("-- Verifying edits from secondary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    verifyData(secondaryRegion, 0, 400, cq, families);<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    LOG.info("-- Verifying edits from primary. Ensuring that files are not deleted");<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    verifyData(primaryRegion, 0, lastReplayed, cq, families);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    for (HStore store : primaryRegion.getStores()) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      if (store.getColumnFamilyName().equals("cf1")) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        assertEquals(1, store.getStorefilesCount());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        assertEquals(expectedStoreFileCount, store.getStorefilesCount());<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      }<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><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  /**<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * Tests cases where we prepare a flush with some seqId and we receive other flush start markers<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * equal to, greater or less than the previous flush start marker.<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  @Test<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void testReplayFlushStartMarkers() throws IOException {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    // load some data to primary and flush. 1 flush and some more unflushed data<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    putDataWithFlushes(primaryRegion, 100, 100, 100);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    int numRows = 200;<a name="line.446"></a>
+<span class="sourceLineNo">410</span>          // assert that the store sizes are bigger<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          assertTrue(store.getSize() &gt; storeSize);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          assertTrue(store.getStoreSizeUncompressed() &gt; storeSizeUncompressed);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          assertEquals(store.getSize(), store.getStorefilesSize());<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        // after replay verify that everything is still visible<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        verifyData(secondaryRegion, 0, lastReplayed+1, cq, families);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      } else if (compactionDesc != null) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        secondaryRegion.replayWALCompactionMarker(compactionDesc, true, false, Long.MAX_VALUE);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // assert that the compaction is applied<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        for (HStore store : secondaryRegion.getStores()) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          if (store.getColumnFamilyName().equals("cf1")) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>            assertEquals(1, store.getStorefilesCount());<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          } else {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>            assertEquals(expectedStoreFileCount, store.getStorefilesCount());<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>      } else {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        lastReplayed = replayEdit(secondaryRegion, entry);<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><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    assertEquals(400-1, lastReplayed);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    LOG.info("-- Verifying edits from secondary");<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    verifyData(secondaryRegion, 0, 400, cq, families);<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    LOG.info("-- Verifying edits from primary. Ensuring that files are not deleted");<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    verifyData(primaryRegion, 0, lastReplayed, cq, families);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    for (HStore store : primaryRegion.getStores()) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      if (store.getColumnFamilyName().equals("cf1")) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        assertEquals(1, store.getStorefilesCount());<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      } else {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        assertEquals(expectedStoreFileCount, store.getStorefilesCount());<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>    // now replay the edits and the flush marker<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    reader =  createWALReaderForPrimary();<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    LOG.info("-- Replaying edits and flush events in secondary");<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>    FlushDescriptor startFlushDesc = null;<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    int lastReplayed = 0;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    while (true) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      WAL.Entry entry = reader.next();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      if (entry == null) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        break;<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      FlushDescriptor flushDesc<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      = WALEdit.getFlushDescriptor(entry.getEdit().getCells().get(0));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (flushDesc != null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        // first verify that everything is replayed and visible before flush event replay<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        HStore store = secondaryRegion.getStore(Bytes.toBytes("cf1"));<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        long storeMemstoreSize = store.getMemStoreSize().getHeapSize();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        long regionMemstoreSize = secondaryRegion.getMemStoreDataSize();<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        MemStoreSize mss = store.getFlushableSize();<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>        if (flushDesc.getAction() == FlushAction.START_FLUSH) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          startFlushDesc = flushDesc;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          LOG.info("-- Replaying flush start in secondary");<a name="line.472"></a>
-<span class="sourceLineNo">473</span>          PrepareFlushResult result = secondaryRegion.replayWALFlushStartMarker(startFlushDesc);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          assertNull(result.result);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          assertEquals(result.flushOpSeqId, startFlushDesc.getFlushSequenceNumber());<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          assertTrue(regionMemstoreSize &gt; 0);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>          assertTrue(mss.getHeapSize() &gt; 0);<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>          // assert that the store memstore is smaller now<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          long newStoreMemstoreSize = store.getMemStoreSize().getHeapSize();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          LOG.info("Memstore size reduced by:"<a name="line.481"></a>
-<span class="sourceLineNo">482</span>              + StringUtils.humanReadableInt(newStoreMemstoreSize - storeMemstoreSize));<a name="line.482"></a>
-<span class="sourceLineNo">483</span>          assertTrue(storeMemstoreSize &gt; newStoreMemstoreSize);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          verifyData(secondaryRegion, 0, lastReplayed+1, cq, families);<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        // after replay verify that everything is still visible<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        verifyData(secondaryRegion, 0, lastReplayed+1, cq, families);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      } else {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        lastReplayed = replayEdit(secondaryRegion, entry);<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><a name="line.493"></a>
-<span class="sourceLineNo">494</span>    // at this point, there should be some data (rows 0-100) in memstore snapshot<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    // and some more data in memstores (rows 100-200)<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>    verifyData(secondaryRegion, 0, numRows, cq, families);<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Test case 1: replay the same flush start marker again<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    LOG.info("-- Replaying same flush start in secondary again");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    PrepareFlushResult result = secondaryRegion.replayWALFlushStartMarker(startFlushDesc);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    assertNull(result); // this should return null. Ignoring the flush start marker<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    // assert that we still have prepared flush with the previous setup.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    assertNotNull(secondaryRegion.getPrepareFlushResult());<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    assertEquals(secondaryRegion.getPrepareFlushResult().flushOpSeqId,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      startFlushDesc.getFlushSequenceNumber());<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    assertTrue(secondaryRegion.getMemStoreDataSize() &gt; 0); // memstore is not empty<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    verifyData(secondaryRegion, 0, numRows, cq, families);<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // Test case 2: replay a flush start marker with a smaller seqId<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    FlushDescriptor startFlushDescSmallerSeqId<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      = clone(startFlushDesc, startFlushDesc.getFlushSequenceNumber() - 50);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    LOG.info("-- Replaying same flush start in secondary again " + startFlushDescSmallerSeqId);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    result = secondaryRegion.replayWALFlushStartMarker(startFlushDescSmallerSeqId);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    assertNull(result); // this should return null. Ignoring the flush start marker<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // assert that we still have prepared flush with the previous setup.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    assertNotNull(secondaryRegion.getPrepareFlushResult());<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    assertEquals(secondaryRegion.getPrepareFlushResult().flushOpSeqId,<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      startFlushDesc.getFlushSequenceNumber());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    assertTrue(secondaryRegion.getMemStoreDataSize() &gt; 0); // memstore is not empty<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    verifyData(secondaryRegion, 0, numRows, cq, families);<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Test case 3: replay a flush start marker with a larger seqId<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    FlushDescriptor startFlushDescLargerSeqId<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      = clone(startFlushDesc, startFlushDesc.getFlushSequenceNumber() + 50);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    LOG.info("-- Replaying same flush start in secondary again " + startFlushDescLargerSeqId);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    result = secondaryRegion.replayWALFlushStartMarker(startFlushDescLargerSeqId);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    assertNull(result); // this should return null. Ignoring the flush start marker<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    // assert that we still have prepared flush with the previous setup.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    assertNotNull(secondaryRegion.getPrepareFlushResult());<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    assertEquals(secondaryRegion.getPrepareFlushResult().flushOpSeqId,<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      startFlushDesc.getFlushSequenceNumber());<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    assertTrue(secondaryRegion.getMemStoreDataSize() &gt; 0); // memstore is not empty<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    verifyData(secondaryRegion, 0, numRows, cq, families);<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    LOG.info("-- Verifying edits from secondary");<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    verifyData(secondaryRegion, 0, numRows, cq, families);<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>    LOG.info("-- Verifying edits from primary.");<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    verifyData(primaryRegion, 0, numRows, cq, families);<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>   * Tests the case where we prepare a flush with some seqId and we receive a flush commit marker<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * less than the previous flush start marker.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  @Test<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  public void testReplayFlushCommitMarkerSmallerThanFlushStartMarker() throws IOException {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // load some data to primary and flush. 2 flushes and some more unflushed data<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    putDataWithFlushes(primaryRegion, 100, 200, 100);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    int numRows = 300;<a name="line.551"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Tests cases where we prepare a flush with some seqId and we receive other flush start markers<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * equal to, greater or less than the previous flush start marker.<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   */<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  @Test<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  public void testReplayFlushStartMarkers() throws IOException {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    // load some data to primary and flush. 1 flush and some more unflushed data<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    putDataWithFlushes(primaryRegion, 100, 100, 100);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    int numRows = 200;<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    // now replay the edits and the flush marker<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    reader =  createWALReaderForPrimary();<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>    LOG.info("-- Replaying edits and flush events in secondary");<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    FlushDescriptor startFlushDesc = null;<a name="line.463"></a>
+<span class="sourceLineNo">464</span><a name="line.464"></a>
+<span class="sourceLineNo">465</span>    int lastReplayed = 0;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    while (true) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      WAL.Entry entry = reader.next();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      if (entry == null) {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        break;<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      FlushDescriptor flushDesc<a name="line.471"><

<TRUNCATED>

[16/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html
index 4937495..a661ecb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html
@@ -204,7 +204,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicat
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion</a>, <a href="../../../../../org
 /apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html
index 0f39eca..f8d26e1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html
@@ -136,35 +136,42 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationActive</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a></span></code>
+<div class="block">Testcase to confirm that serial replication will not be stuck when using along with synchronous
+ replication.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalCopyToRemote</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationActive</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalCopyToRemote</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a></span></code>
 <div class="block">Testcase for HBASE-21441.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationRemoveRemoteWAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandBy</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillMaster</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillRS</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestSerialSyncReplication.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestSerialSyncReplication.html b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestSerialSyncReplication.html
new file mode 100644
index 0000000..90a3de5
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestSerialSyncReplication.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.replication.TestSerialSyncReplication (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.replication.TestSerialSyncReplication (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/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">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/replication/class-use/TestSerialSyncReplication.html" target="_top">Frames</a></li>
+<li><a href="TestSerialSyncReplication.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.replication.TestSerialSyncReplication" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.TestSerialSyncReplication</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.TestSerialSyncReplication</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/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">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/replication/class-use/TestSerialSyncReplication.html" target="_top">Frames</a></li>
+<li><a href="TestSerialSyncReplication.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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/replication/package-frame.html
index 19c695f..75dea5c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/package-frame.html
@@ -66,6 +66,7 @@
 <li><a href="TestReplicationWithTags.TestCoprocessorForTagsAtSource.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestReplicationWithTags.TestCoprocessorForTagsAtSource</a></li>
 <li><a href="TestSerialReplication.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialReplication</a></li>
 <li><a href="TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialReplicationFailover</a></li>
+<li><a href="TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialSyncReplication</a></li>
 <li><a href="TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSyncReplicationActive</a></li>
 <li><a href="TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSyncReplicationMoreLogsInLocalCopyToRemote</a></li>
 <li><a href="TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/replication/package-summary.html
index a3414b5..564e352 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/package-summary.html
@@ -327,52 +327,59 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialSyncReplication</a></td>
+<td class="colLast">
+<div class="block">Testcase to confirm that serial replication will not be stuck when using along with synchronous
+ replication.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationActive</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalCopyToRemote</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes</a></td>
 <td class="colLast">
 <div class="block">Testcase for HBASE-21441.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationNewRSJoinBetweenRefreshes.HaltCP.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationNewRSJoinBetweenRefreshes.HaltCP</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationRemoveRemoteWAL</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandBy.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandBy</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillMaster.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillMaster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationStandbyKillRS.html" title="class in org.apache.hadoop.hbase.replication">TestSyncReplicationStandbyKillRS</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestZKReplicationPeerStorage.html" title="class in org.apache.hadoop.hbase.replication">TestZKReplicationPeerStorage</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/TestZKReplicationQueueStorage.html" title="class in org.apache.hadoop.hbase.replication">TestZKReplicationQueueStorage</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index 100294a..a42b9cb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -143,6 +143,7 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationTestBase</span></a>
 <ul>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSerialSyncReplication</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSyncReplicationActive</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSyncReplicationMoreLogsInLocalCopyToRemote</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html
index ab93c36..0216bb9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html
@@ -187,7 +187,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="..
 /../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion
 </a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="..
 /../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion
 </a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html
index cca32c3..fcdeba2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSyncReplicationShipperQuit.html
@@ -188,7 +188,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="..
 /../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion
 </a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#setUp--">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#tearDown--">tearDown</a>, <a href="..
 /../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verify-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verify</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyNotReplicatedThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyNotReplicatedThroughRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyRemovedPeer-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HBaseTestingUtility-">verifyRemovedPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyReplicationRequestRejection-org.apache.hadoop.hbase.HBaseTestingUtility-boolean-">verifyReplicationRequestRejection</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#verifyThroughRegion-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">verifyThroughRegion
 </a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilDeleted-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.fs.Path-">waitUntilDeleted</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#waitUntilReplicationDone-org.apache.hadoop.hbase.HBaseTestingUtility-int-">waitUntilReplicationDone</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#write-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">write</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#writeAndVerifyReplication-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-int-int-">writeAndVerifyReplication</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/f848663d/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 41884c7..ff48e4c 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/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/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/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/f848663d/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 2f75041..a9f1e66 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -147,8 +147,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/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/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/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index af84d24..3c57784 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -2348,6 +2348,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestDrainReplicationQueuesForStandBy.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestDrainReplicationQueuesForStandBy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">TestRegisterPeerWorkerWhenRestarting</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialSyncReplication.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSerialSyncReplication</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationActive.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSyncReplicationActive</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalCopyToRemote.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSyncReplicationMoreLogsInLocalCopyToRemote</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSyncReplicationMoreLogsInLocalGiveUpSplitting.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestSyncReplicationMoreLogsInLocalGiveUpSplitting</span></a></li>


[03/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        master.getServerManager().moveFromOnlineToDeadServers(server);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        s

<TRUNCATED>

[27/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index f05abca..0245364 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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,10 +291,10 @@
 <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>3815</td>
+<td>3816</td>
 <td>0</td>
 <td>0</td>
-<td>14790</td></tr></table></div>
+<td>14791</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5164,4491 +5164,4496 @@
 <td>0</td>
 <td>2</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
+<td><a href="#org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure.java">org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
 <tr class="a">
-<td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
+<td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
 <tr class="b">
+<td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.java">org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TestSnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/TestSnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.CachedMobFile.java">org/apache/hadoop/hbase/mob/CachedMobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor.java">org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.ExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobCacheConfig.java">org/apache/hadoop/hbase/mob/MobCacheConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobConstants.java">org/apache/hadoop/hbase/mob/MobConstants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFile.java">org/apache/hadoop/hbase/mob/MobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileCache.java">org/apache/hadoop/hbase/mob/MobFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileName.java">org/apache/hadoop/hbase/mob/MobFileName.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobTestUtil.java">org/apache/hadoop/hbase/mob/MobTestUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.TestDefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/TestDefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.TestExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/TestExpiredMobFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.MobCompactor.java">org/apache/hadoop/hbase/mob/compactions/MobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactionRequest.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.TestMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/TestMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.TestPartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/TestPartitionedMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.LogMonitoring.java">org/apache/hadoop/hbase/monitoring/LogMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer.java">org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandlerImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredTaskImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.StateDumpServlet.java">org/apache/hadoop/hbase/monitoring/StateDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TestTaskMonitor.java">org/apache/hadoop/hbase/monitoring/TestTaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mttr.IntegrationTestMTTR.java">org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.TestNamespaceAuditor.java">org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.net.Address.java">org/apache/hadoop/hbase/net/Address.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.net.TestAddress.java">org/apache/hadoop/hbase/net/TestAddress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.SingleByteBuff.java">org/apache/hadoop/hbase/nio/SingleByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.SimpleMasterProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleMasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.SimpleRSProcedureManager.java">org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/TestProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureDescriber.java">org/apache/hadoop/hbase/procedure/TestProcedureDescriber.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestProcedureMember.java">org/apache/hadoop/hbase/procedure/TestProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedure.java">org/apache/hadoop/hbase/procedure/TestZKProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.TestZKProcedureControllers.java">org/apache/hadoop/hbase/procedure/TestZKProcedureControllers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.FlushTableSubprocedure.java">org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.AbstractProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.BadProcedureException.java">org/apache/hadoop/hbase/procedure2/BadProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.LockedResource.java">org/apache/hadoop/hbase/procedure2/LockedResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureDeque.java">org/apache/hadoop/hbase/procedure2/ProcedureDeque.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureException.java">org/apache/hadoop/hbase/procedure2/ProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.java">org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureUtil.java">org/apache/hadoop/hbase/procedure2/ProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureExecution.java">org/apache/hadoop/hbase/procedure2/TestProcedureExecution.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureMetrics.java">org/apache/hadoop/hbase/procedure2/TestProcedureMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureNonce.java">org/apache/hadoop/hbase/procedure2/TestProcedureNonce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.java">org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureReplayOrder.java">org/apache/hadoop/hbase/procedure2/TestProcedureReplayOrder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureSchedulerConcurrency.java">org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureSuspended.java">org/apache/hadoop/hbase/procedure2/TestProcedureSuspended.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestProcedureToString.java">org/apache/hadoop/hbase/procedure2/TestProcedureToString.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestStateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.TestYieldProcedures.java">org/apache/hadoop/hbase/procedure2/TestYieldProcedures.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.TestProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALLoaderPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestStressWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestProtobufUtil.java">org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestReplicationProtobuf.java">org/apache/hadoop/hbase/protobuf/TestReplicationProtobuf.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement.java">org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettings.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettingsImpl.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NamespaceQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.OperationQuota.java">org/apache/hadoop/hbase/quotas/OperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaObserverChore.java">org/apache/hadoop/hbase/quotas/QuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaState.java">org/apache/hadoop/hbase/quotas/QuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceLimitSettings.java">org/apache/hadoop/hbase/quotas/SpaceLimitSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaRefresherChore.java">org/apache/hadoop/hbase/quotas/SpaceQuotaRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierForTest.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestFileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/TestFileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestNamespaceQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestNamespaceQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaFilter.java">org/apache/hadoop/hbase/quotas/TestQuotaFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreWithMiniCluster.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/TestQuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaStatusRPCs.java">org/apache/hadoop/hbase/quotas/TestQuotaStatusRPCs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaThrottle.java">org/apache/hadoop/hbase/quotas/TestQuotaThrottle.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestRateLimiter.java">org/apache/hadoop/hbase/quotas/TestRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestSpaceQuotas.java">org/apache/hadoop/hbase/quotas/TestSpaceQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTableQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTablesWithQuotas.java">org/apache/hadoop/hbase/quotas/TestTablesWithQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.BaseViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/BaseViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DefaultViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DefaultViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DisableTableViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DisableTableViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoInsertsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesCompactionsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.TestBulkLoadCheckingViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractTestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/AbstractTestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BusyRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CSLMImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkMap.java">org/apache/hadoop/hbase/regionserver/CellChunkMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChangedReadersObserver.java">org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplit.java">org/apache/hadoop/hbase/regionserver/CompactSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompositeImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CreateRandomStoreFile.java">org/apache/hadoop/hbase/regionserver/CreateRandomStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelegatingKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/DelegatingKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelimitedKeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FifoRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/FifoRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>209</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperStub.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableSource.java">org/apache/hadoop/hbase/regionserver/MetricsTableSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperStub.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MobReferenceOnlyFilter.java">org/apache/hadoop/hbase/regionserver/MobReferenceOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableOnlineRegions.java">org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NoTagByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OOMERegionServer.java">org/apache/hadoop/hbase/regionserver/OOMERegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionAsTable.java">org/apache/hadoop/hbase/regionserver/RegionAsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerAccounting.java">org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServicesForStores.java">org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RowProcessor.java">org/apache/hadoop/hbase/regionserver/RowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanOptions.java">org/apache/hadoop/hbase/regionserver/ScanOptions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerIdGenerator.java">org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentFactory.java">org/apache/hadoop/hbase/regionserver/SegmentFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentScanner.java">org/apache/hadoop/hbase/regionserver/SegmentScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShipperListener.java">org/apache/hadoop/hbase/regionserver/ShipperListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShutdownHook.java">org/apache/hadoop/hbase/regionserver/ShutdownHook.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitRequest.java">org/apache/hadoop/hbase/regionserver/SplitRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy.java">org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileComparators.java">org/apache/hadoop/hbase/regionserver/StoreFileComparators.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileInfo.java">org/apache/hadoop/hbase/regionserver/StoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileManager.java">org/apache/hadoop/hbase/regionserver/StoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileReader.java">org/apache/hadoop/hbase/regionserver/StoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileWriter.java">org/apache/hadoop/hbase/regionserver/StoreFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlusher.java">org/apache/hadoop/hbase/regionserver/StoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StorefileRefresherChore.java">org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreConfig.java">org/apache/hadoop/hbase/regionserver/StripeStoreConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreEngine.java">org/apache/hadoop/hbase/regionserver/StripeStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFlusher.java">org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestAtomicOperation.java">org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBlocksRead.java">org/apache/hadoop/hbase/regionserver/TestBlocksRead.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBlocksScanned.java">org/apache/hadoop/hbase/regionserver/TestBlocksScanned.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestBulkLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCacheOnWriteInSchema.java">org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCellFlatSet.java">org/apache/hadoop/hbase/regionserver/TestCellFlatSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCellSkipListSet.java">org/apache/hadoop/hbase/regionserver/TestCellSkipListSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestClearRegionBlockCache.java">org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestColumnSeeking.java">org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactSplitThread.java">org/apache/hadoop/hbase/regionserver/TestCompactSplitThread.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactingMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactingToCellFlatMapMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingToCellFlatMapMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompaction.java">org/apache/hadoop/hbase/regionserver/TestCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactionState.java">org/apache/hadoop/hbase/regionserver/TestCompactionState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDefaultMemStore.java">org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDeleteMobTable.java">org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction.java">org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestFailedAppendAndSync.java">org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestGetClosestAtOrBefore.java">org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHMobStore.java">org/apache/hadoop/hbase/regionserver/TestHMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegion.java">org/apache/hadoop/hbase/regionserver/TestHRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/TestHRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionInfo.java">org/apache/hadoop/hbase/regionserver/TestHRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionReplayEvents.java">org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoadWithOldClient.java">org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoadWithOldClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHStore.java">org/apache/hadoop/hbase/regionserver/TestHStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHStoreFile.java">org/apache/hadoop/hbase/regionserver/TestHStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestJoinedScanners.java">org/apache/hadoop/hbase/regionserver/TestJoinedScanners.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeepDeletes.java">org/apache/hadoop/hbase/regionserver/TestKeepDeletes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/TestKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeyValueScanFixture.java">org/apache/hadoop/hbase/regionserver/TestKeyValueScanFixture.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMajorCompaction.java">org/apache/hadoop/hbase/regionserver/TestMajorCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMasterAddressTracker.java">org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMemstoreLABWithoutPool.java">org/apache/hadoop/hbase/regionserver/TestMemstoreLABWithoutPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMetricsRegion.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMinorCompaction.java">org/apache/hadoop/hbase/regionserver/TestMinorCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMobStoreScanner.java">org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiColumnScanner.java">org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiLogThreshold.java">org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/TestMultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestParallelPut.java">org/apache/hadoop/hbase/regionserver/TestParallelPut.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestPerColumnFamilyFlush.java">org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestPriorityRpc.java">org/apache/hadoop/hbase/regionserver/TestPriorityRpc.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestQosFunction.java">org/apache/hadoop/hbase/regionserver/TestQosFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRSKilledWhenInitializing.java">org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRecoveredEdits.java">org/apache/hadoop/hbase/regionserver/TestRecoveredEdits.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionIncrement.java">org/apache/hadoop/hbase/regionserver/TestRegionIncrement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionInfoBuilder.java">org/apache/hadoop/hbase/regionserver/TestRegionInfoBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionMergeTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionOpen.java">org/apache/hadoop/hbase/regionserver/TestRegionOpen.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionReplicaFailover.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicaFailover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionReplicas.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerAbort.java">org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerHostname.java">org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerNoMaster.java">org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerOnlineConfigChange.java">org/apache/hadoop/hbase/regionserver/TestRegionServerOnlineConfigChange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerReadRequestMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerReportForDuty.java">org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestResettingCounters.java">org/apache/hadoop/hbase/regionserver/TestResettingCounters.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestReversibleScanners.java">org/apache/hadoop/hbase/regionserver/TestReversibleScanners.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRowTooBig.java">org/apache/hadoop/hbase/regionserver/TestRowTooBig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScanner.java">org/apache/hadoop/hbase/regionserver/TestScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerRetriableFailure.java">org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerWithBulkload.java">org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSeekOptimizations.java">org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSettingTimeoutOnBlockingPoint.java">org/apache/hadoop/hbase/regionserver/TestSettingTimeoutOnBlockingPoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSimpleTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSimpleTimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSplitLogWorker.java">org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStoreFileInfo.java">org/apache/hadoop/hbase/regionserver/TestStoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStoreFileRefresherChore.java">org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStoreScanner.java">org/apache/hadoop/hbase/regionserver/TestStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSyncTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSyncTimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestTags.java">org/apache/hadoop/hbase/regionserver/TestTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestTimestampFilterSeekHint.java">org/apache/hadoop/hbase/regionserver/TestTimestampFilterSeekHint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWALLockup.java">org/apache/hadoop/hbase/regionserver/TestWALLockup.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWALMonotonicallyIncreasingSeqId.java">org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionConfiguration.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.Compactor.java">org/apache/hadoop/hbase/regionserver/compactions/Compactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CurrentHourProvider.java">org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/OffPeakHou

<TRUNCATED>

[18/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
index 1adc17f..01de5ba 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9,"i7":9,"i8":10,"i9":10,"i10":10,"i11":9,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":9,"i7":9,"i8":10,"i9":10,"i10":10,"i11":9,"i12":10,"i13":9,"i14":10,"i15":9,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":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";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.112">TestHRegionReplayEvents</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.114">TestHRegionReplayEvents</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">Tests of HRegion methods for replaying flush, compaction, region open, etc events for secondary
  region replicas</div>
@@ -212,17 +212,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#time">time</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.wal.WAL</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#walPrimary">walPrimary</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.wal.WALFactory</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#wals">wals</a></span></code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.wal.WAL</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#walSecondary">walSecondary</a></span></code>&nbsp;</td>
@@ -337,165 +329,173 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setup--">setup</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setUp--">setUp</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i13" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testBatchReplayWithMultipleNonces--">testBatchReplayWithMultipleNonces</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testOnlyReplayingFlushStartDoesNotHoldUpRegionClose--">testOnlyReplayingFlushStartDoesNotHoldUpRegionClose</a></span>()</code>
 <div class="block">Tests a case where we replay only a flush start marker, then the region is closed.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testRefresStoreFiles--">testRefresStoreFiles</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<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/regionserver/TestHRegionReplayEvents.html#testRegionReadsEnabledFlag--">testRegionReadsEnabledFlag</a></span>()</code>
 <div class="block">Tests the reads enabled flag for the region.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testRegionReplicaSecondaryCannotFlush--">testRegionReplicaSecondaryCannotFlush</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayBulkLoadEvent--">testReplayBulkLoadEvent</a></span>()</code>
 <div class="block">Tests replaying region open markers from primary region.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayFlushCommitMarkerLargerThanFlushStartMarker--">testReplayFlushCommitMarkerLargerThanFlushStartMarker</a></span>()</code>
 <div class="block">Tests the case where we prepare a flush with some seqId and we receive a flush commit marker
  larger than the previous flush start marker.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayFlushCommitMarkerSmallerThanFlushStartMarker--">testReplayFlushCommitMarkerSmallerThanFlushStartMarker</a></span>()</code>
 <div class="block">Tests the case where we prepare a flush with some seqId and we receive a flush commit marker
  less than the previous flush start marker.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayFlushCommitMarkerWithoutFlushStartMarker-boolean-">testReplayFlushCommitMarkerWithoutFlushStartMarker</a></span>(boolean&nbsp;droppableMemstore)</code>
 <div class="block">Tests the case where we receive a flush commit before receiving any flush prepare markers</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/regionserver/TestHRegionReplayEvents.html#testReplayFlushCommitMarkerWithoutFlushStartMarkerDroppableMemstore--">testReplayFlushCommitMarkerWithoutFlushStartMarkerDroppableMemstore</a></span>()</code>
 <div class="block">Tests the case where we receive a flush commit before receiving any flush prepare markers.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayFlushCommitMarkerWithoutFlushStartMarkerNonDroppableMemstore--">testReplayFlushCommitMarkerWithoutFlushStartMarkerNonDroppableMemstore</a></span>()</code>
 <div class="block">Tests the case where we receive a flush commit before receiving any flush prepare markers.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayFlushesAndCompactions--">testReplayFlushesAndCompactions</a></span>()</code>&nbsp;</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/regionserver/TestHRegionReplayEvents.html#testReplayFlushSeqIds--">testReplayFlushSeqIds</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayFlushStartMarkers--">testReplayFlushStartMarkers</a></span>()</code>
 <div class="block">Tests cases where we prepare a flush with some seqId and we receive other flush start markers
  equal to, greater or less than the previous flush start marker.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingBulkLoadEventWithFileAlreadyDeleted--">testReplayingBulkLoadEventWithFileAlreadyDeleted</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingCompactionWithFileAlreadyDeleted--">testReplayingCompactionWithFileAlreadyDeleted</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingFlushCommitWithFileAlreadyDeleted--">testReplayingFlushCommitWithFileAlreadyDeleted</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingFlushRequestRestoresReadsEnabledState--">testReplayingFlushRequestRestoresReadsEnabledState</a></span>()</code>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingFlushRestoresReadsEnabledState--">testReplayingFlushRestoresReadsEnabledState</a></span>()</code>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingFlushWithEmptyMemstoreRestoresReadsEnabledState--">testReplayingFlushWithEmptyMemstoreRestoresReadsEnabledState</a></span>()</code>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingRegionOpenEventRestoresReadsEnabledState--">testReplayingRegionOpenEventRestoresReadsEnabledState</a></span>()</code>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayingRegionOpenEventWithFileAlreadyDeleted--">testReplayingRegionOpenEventWithFileAlreadyDeleted</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayRegionOpenEvent--">testReplayRegionOpenEvent</a></span>()</code>
 <div class="block">Tests replaying region open markers from primary region.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testReplayRegionOpenEventAfterFlushStart--">testReplayRegionOpenEventAfterFlushStart</a></span>()</code>
 <div class="block">Tests the case where we replay a region open event after a flush start but before receiving
  flush commit</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testSecondaryRegionDoesNotWriteRegionEventsToWAL--">testSecondaryRegionDoesNotWriteRegionEventsToWAL</a></span>()</code>
 <div class="block">Tests that a region opened in secondary mode would not write region open / close
  events to its WAL.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testSeqIdsFromReplay--">testSeqIdsFromReplay</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testSkippingEditsWithSmallerSeqIdAfterRegionOpenEvent--">testSkippingEditsWithSmallerSeqIdAfterRegionOpenEvent</a></span>()</code>
 <div class="block">Tests whether edits coming in for replay are skipped which have smaller seq id than the seqId
  of the last replayed region open event.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#testWriteFlushRequestMarker--">testWriteFlushRequestMarker</a></span>()</code>
 <div class="block">Tests the case where a request for flush cache is sent to the region, but region cannot flush.</div>
@@ -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>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/regionserver/TestHRegionReplayEvents.html#line.115">CLASS_RULE</a></pre>
+<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/regionserver/TestHRegionReplayEvents.html#line.117">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -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>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.118">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.120">LOG</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -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>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.119">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.121">name</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -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>TEST_UTIL</h4>
-<pre>private 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/regionserver/TestHRegionReplayEvents.html#line.121">TEST_UTIL</a></pre>
+<pre>private 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/regionserver/TestHRegionReplayEvents.html#line.123">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="CONF">
@@ -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>CONF</h4>
-<pre>public static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.123">CONF</a></pre>
+<pre>public static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.125">CONF</a></pre>
 </li>
 </ul>
 <a name="dir">
@@ -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>dir</h4>
-<pre>private&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/regionserver/TestHRegionReplayEvents.html#line.124">dir</a></pre>
+<pre>private&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/regionserver/TestHRegionReplayEvents.html#line.126">dir</a></pre>
 </li>
 </ul>
 <a name="families">
@@ -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>families</h4>
-<pre>private&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.126">families</a></pre>
+<pre>private&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.128">families</a></pre>
 </li>
 </ul>
 <a name="tableName">
@@ -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>tableName</h4>
-<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.130">tableName</a></pre>
+<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.132">tableName</a></pre>
 </li>
 </ul>
 <a name="method">
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>method</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> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.131">method</a></pre>
+<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> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.133">method</a></pre>
 </li>
 </ul>
 <a name="row">
@@ -610,7 +610,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>row</h4>
-<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.132">row</a></pre>
+<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.134">row</a></pre>
 </li>
 </ul>
 <a name="row2">
@@ -619,7 +619,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>row2</h4>
-<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.133">row2</a></pre>
+<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.135">row2</a></pre>
 </li>
 </ul>
 <a name="cq">
@@ -628,7 +628,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cq</h4>
-<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.134">cq</a></pre>
+<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.136">cq</a></pre>
 </li>
 </ul>
 <a name="rootDir">
@@ -637,7 +637,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rootDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.137">rootDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.139">rootDir</a></pre>
 </li>
 </ul>
 <a name="htd">
@@ -646,16 +646,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>htd</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.TableDescriptor <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.138">htd</a></pre>
-</li>
-</ul>
-<a name="time">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>time</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.139">time</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.TableDescriptor <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.140">htd</a></pre>
 </li>
 </ul>
 <a name="rss">
@@ -664,7 +655,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rss</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.140">rss</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.141">rss</a></pre>
 </li>
 </ul>
 <a name="primaryHri">
@@ -673,7 +664,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>primaryHri</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.141">primaryHri</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.142">primaryHri</a></pre>
 </li>
 </ul>
 <a name="secondaryHri">
@@ -682,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>secondaryHri</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.141">secondaryHri</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.142">secondaryHri</a></pre>
 </li>
 </ul>
 <a name="primaryRegion">
@@ -691,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>primaryRegion</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.142">primaryRegion</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.143">primaryRegion</a></pre>
 </li>
 </ul>
 <a name="secondaryRegion">
@@ -700,16 +691,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>secondaryRegion</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.142">secondaryRegion</a></pre>
-</li>
-</ul>
-<a name="wals">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>wals</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALFactory <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.143">wals</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.143">secondaryRegion</a></pre>
 </li>
 </ul>
 <a name="walPrimary">
@@ -753,7 +735,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestHRegionReplayEvents</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.112">TestHRegionReplayEvents</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.114">TestHRegionReplayEvents</a>()</pre>
 </li>
 </ul>
 </li>
@@ -764,17 +746,45 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="setup--">
+<a name="setUpBeforeClass--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.148">setup</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>
+<h4>setUpBeforeClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.148">setUpBeforeClass</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/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<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="tearDownAfterClass--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDownAfterClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.154">tearDownAfterClass</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="setUp--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.161">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>
@@ -784,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>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.197">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.209">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>
@@ -798,7 +808,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getName</h4>
-<pre><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/regionserver/TestHRegionReplayEvents.html#line.214">getName</a>()</pre>
+<pre><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/regionserver/TestHRegionReplayEvents.html#line.224">getName</a>()</pre>
 </li>
 </ul>
 <a name="testRegionReplicaSecondaryCannotFlush--">
@@ -807,7 +817,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionReplicaSecondaryCannotFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.230">testRegionReplicaSecondaryCannotFlush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.240">testRegionReplicaSecondaryCannotFlush</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>
@@ -821,7 +831,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testOnlyReplayingFlushStartDoesNotHoldUpRegionClose</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.257">testOnlyReplayingFlushStartDoesNotHoldUpRegionClose</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.267">testOnlyReplayingFlushStartDoesNotHoldUpRegionClose</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>
 <div class="block">Tests a case where we replay only a flush start marker, then the region is closed. This region
  should not block indefinitely</div>
@@ -837,7 +847,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>replayEdit</h4>
-<pre>static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.296">replayEdit</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+<pre>static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.306">replayEdit</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                       org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)
                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>
@@ -852,7 +862,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALReaderForPrimary</h4>
-<pre>org.apache.hadoop.hbase.wal.WAL.Reader&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.309">createWALReaderForPrimary</a>()
+<pre>org.apache.hadoop.hbase.wal.WAL.Reader&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.319">createWALReaderForPrimary</a>()
                                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</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></pre>
 <dl>
@@ -868,7 +878,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchReplayWithMultipleNonces</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.316">testBatchReplayWithMultipleNonces</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.326">testBatchReplayWithMultipleNonces</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>
@@ -882,7 +892,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushesAndCompactions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.337">testReplayFlushesAndCompactions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.347">testReplayFlushesAndCompactions</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>
@@ -896,7 +906,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushStartMarkers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.443">testReplayFlushStartMarkers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.453">testReplayFlushStartMarkers</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>
 <div class="block">Tests cases where we prepare a flush with some seqId and we receive other flush start markers
  equal to, greater or less than the previous flush start marker.</div>
@@ -912,7 +922,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushCommitMarkerSmallerThanFlushStartMarker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.548">testReplayFlushCommitMarkerSmallerThanFlushStartMarker</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.558">testReplayFlushCommitMarkerSmallerThanFlushStartMarker</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>
 <div class="block">Tests the case where we prepare a flush with some seqId and we receive a flush commit marker
  less than the previous flush start marker.</div>
@@ -928,7 +938,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushCommitMarkerLargerThanFlushStartMarker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.639">testReplayFlushCommitMarkerLargerThanFlushStartMarker</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.649">testReplayFlushCommitMarkerLargerThanFlushStartMarker</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>
 <div class="block">Tests the case where we prepare a flush with some seqId and we receive a flush commit marker
  larger than the previous flush start marker.</div>
@@ -944,7 +954,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushCommitMarkerWithoutFlushStartMarkerDroppableMemstore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.731">testReplayFlushCommitMarkerWithoutFlushStartMarkerDroppableMemstore</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.741">testReplayFlushCommitMarkerWithoutFlushStartMarkerDroppableMemstore</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>
 <div class="block">Tests the case where we receive a flush commit before receiving any flush prepare markers.
  The memstore edits should be dropped after the flush commit replay since they should be in
@@ -961,7 +971,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushCommitMarkerWithoutFlushStartMarkerNonDroppableMemstore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.742">testReplayFlushCommitMarkerWithoutFlushStartMarkerNonDroppableMemstore</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.752">testReplayFlushCommitMarkerWithoutFlushStartMarkerNonDroppableMemstore</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>
 <div class="block">Tests the case where we receive a flush commit before receiving any flush prepare markers.
  The memstore edits should be not dropped after the flush commit replay since not every edit
@@ -978,7 +988,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushCommitMarkerWithoutFlushStartMarker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.750">testReplayFlushCommitMarkerWithoutFlushStartMarker</a>(boolean&nbsp;droppableMemstore)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.760">testReplayFlushCommitMarkerWithoutFlushStartMarker</a>(boolean&nbsp;droppableMemstore)
                                                         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">Tests the case where we receive a flush commit before receiving any flush prepare markers</div>
 <dl>
@@ -993,7 +1003,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clone</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.836">clone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.846">clone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
                                                                                           long&nbsp;flushSeqId)</pre>
 </li>
 </ul>
@@ -1003,7 +1013,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayRegionOpenEvent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.846">testReplayRegionOpenEvent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.856">testReplayRegionOpenEvent</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>
 <div class="block">Tests replaying region open markers from primary region. Checks whether the files are picked up</div>
 <dl>
@@ -1018,7 +1028,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayRegionOpenEventAfterFlushStart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.926">testReplayRegionOpenEventAfterFlushStart</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.936">testReplayRegionOpenEventAfterFlushStart</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>
 <div class="block">Tests the case where we replay a region open event after a flush start but before receiving
  flush commit</div>
@@ -1034,7 +1044,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSkippingEditsWithSmallerSeqIdAfterRegionOpenEvent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1005">testSkippingEditsWithSmallerSeqIdAfterRegionOpenEvent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1015">testSkippingEditsWithSmallerSeqIdAfterRegionOpenEvent</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>
 <div class="block">Tests whether edits coming in for replay are skipped which have smaller seq id than the seqId
  of the last replayed region open event.</div>
@@ -1050,7 +1060,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayFlushSeqIds</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1063">testReplayFlushSeqIds</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1073">testReplayFlushSeqIds</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>
@@ -1064,7 +1074,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSeqIdsFromReplay</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1107">testSeqIdsFromReplay</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1117">testSeqIdsFromReplay</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>
@@ -1078,7 +1088,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSecondaryRegionDoesNotWriteRegionEventsToWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1149">testSecondaryRegionDoesNotWriteRegionEventsToWAL</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1159">testSecondaryRegionDoesNotWriteRegionEventsToWAL</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>
 <div class="block">Tests that a region opened in secondary mode would not write region open / close
  events to its WAL.</div>
@@ -1094,7 +1104,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionReadsEnabledFlag</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1183">testRegionReadsEnabledFlag</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1193">testRegionReadsEnabledFlag</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>
 <div class="block">Tests the reads enabled flag for the region. When unset all reads should be rejected</div>
 <dl>
@@ -1109,7 +1119,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWriteFlushRequestMarker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1211">testWriteFlushRequestMarker</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1221">testWriteFlushRequestMarker</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>
 <div class="block">Tests the case where a request for flush cache is sent to the region, but region cannot flush.
  It should write the flush request marker instead.</div>
@@ -1125,7 +1135,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingFlushRequestRestoresReadsEnabledState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1249">testReplayingFlushRequestRestoresReadsEnabledState</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1259">testReplayingFlushRequestRestoresReadsEnabledState</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>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region. Replaying CANNOT_FLUSH
@@ -1143,7 +1153,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingFlushRestoresReadsEnabledState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1278">testReplayingFlushRestoresReadsEnabledState</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1288">testReplayingFlushRestoresReadsEnabledState</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>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region. Replaying flush start and commit
@@ -1161,7 +1171,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingFlushWithEmptyMemstoreRestoresReadsEnabledState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1320">testReplayingFlushWithEmptyMemstoreRestoresReadsEnabledState</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1330">testReplayingFlushWithEmptyMemstoreRestoresReadsEnabledState</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>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region. Replaying flush start and commit
@@ -1179,7 +1189,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingRegionOpenEventRestoresReadsEnabledState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1352">testReplayingRegionOpenEventRestoresReadsEnabledState</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1362">testReplayingRegionOpenEventRestoresReadsEnabledState</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>
 <div class="block">Test the case where the secondary region replica is not in reads enabled state because it is
  waiting for a flush or region open marker from primary region. Replaying region open event
@@ -1197,7 +1207,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRefresStoreFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1379">testRefresStoreFiles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1389">testRefresStoreFiles</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>
@@ -1211,7 +1221,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>assertPathListsEqual</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1469">assertPathListsEqual</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;<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;list1,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1479">assertPathListsEqual</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;<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;list1,
                                   <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;list2)</pre>
 <div class="block">Paths can be qualified or not. This does the assertion using String->Path conversion.</div>
 </li>
@@ -1222,7 +1232,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>disableReads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1481">disableReads</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1491">disableReads</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region)</pre>
 </li>
 </ul>
 <a name="replay-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.client.Put-long-">
@@ -1231,7 +1241,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>replay</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1491">replay</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1501">replay</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                     org.apache.hadoop.hbase.client.Put&nbsp;put,
                     long&nbsp;replaySeqId)
              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>
@@ -1247,7 +1257,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayBulkLoadEvent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1501">testReplayBulkLoadEvent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1511">testReplayBulkLoadEvent</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>
 <div class="block">Tests replaying region open markers from primary region. Checks whether the files are picked up</div>
 <dl>
@@ -1262,7 +1272,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingFlushCommitWithFileAlreadyDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1566">testReplayingFlushCommitWithFileAlreadyDeleted</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1576">testReplayingFlushCommitWithFileAlreadyDeleted</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>
@@ -1276,7 +1286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingCompactionWithFileAlreadyDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1586">testReplayingCompactionWithFileAlreadyDeleted</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1596">testReplayingCompactionWithFileAlreadyDeleted</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>
@@ -1290,7 +1300,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingRegionOpenEventWithFileAlreadyDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1604">testReplayingRegionOpenEventWithFileAlreadyDeleted</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1614">testReplayingRegionOpenEventWithFileAlreadyDeleted</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>
@@ -1304,7 +1314,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayingBulkLoadEventWithFileAlreadyDeleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1625">testReplayingBulkLoadEventWithFileAlreadyDeleted</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1635">testReplayingBulkLoadEventWithFileAlreadyDeleted</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>
@@ -1318,7 +1328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createHFileForFamilies</h4>
-<pre>private&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/regionserver/TestHRegionReplayEvents.html#line.1641">createHFileForFamilies</a>(org.apache.hadoop.fs.Path&nbsp;testPath,
+<pre>private&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/regionserver/TestHRegionReplayEvents.html#line.1651">createHFileForFamilies</a>(org.apache.hadoop.fs.Path&nbsp;testPath,
                                       byte[]&nbsp;family,
                                       byte[]&nbsp;valueBytes)
                                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>
@@ -1334,7 +1344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putDataWithFlushes</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1667">putDataWithFlushes</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1677">putDataWithFlushes</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                                 int&nbsp;flushInterval,
                                 int&nbsp;numRows,
                                 int&nbsp;numRowsAfterFlush)
@@ -1354,7 +1364,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>putDataByReplay</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1680">putDataByReplay</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1690">putDataByReplay</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
                              int&nbsp;startRow,
                              int&nbsp;numRows,
                              byte[]&nbsp;qf,
@@ -1372,7 +1382,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initHRegion</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1692">initHRegion</a>(byte[]&nbsp;tableName,
+<pre>private static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1702">initHRegion</a>(byte[]&nbsp;tableName,
                                                                         <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;callingMethod,
                                                                         byte[]...&nbsp;families)
                                                                  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>
@@ -1388,7 +1398,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initHRegion</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1698">initHRegion</a>(byte[]&nbsp;tableName,
+<pre>private static&nbsp;org.apache.hadoop.hbase.regionserver.HRegion&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1708">initHRegion</a>(byte[]&nbsp;tableName,
                                                                         byte[]&nbsp;startKey,
                                                                         byte[]&nbsp;stopKey,
                                                                         <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;callingMethod,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 9cfe80e..0e47559 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/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/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/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/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/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>


[21/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
index d2857dd..a17aad6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
@@ -58,7 +58,7 @@
 <span class="sourceLineNo">050</span>    extends AbstractPeerProcedure&lt;PeerSyncReplicationStateTransitionState&gt; {<a name="line.50"></a>
 <span class="sourceLineNo">051</span><a name="line.51"></a>
 <span class="sourceLineNo">052</span>  private static final Logger LOG =<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      LoggerFactory.getLogger(TransitPeerSyncReplicationStateProcedure.class);<a name="line.53"></a>
+<span class="sourceLineNo">053</span>    LoggerFactory.getLogger(TransitPeerSyncReplicationStateProcedure.class);<a name="line.53"></a>
 <span class="sourceLineNo">054</span><a name="line.54"></a>
 <span class="sourceLineNo">055</span>  protected SyncReplicationState fromState;<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
@@ -66,298 +66,335 @@
 <span class="sourceLineNo">058</span><a name="line.58"></a>
 <span class="sourceLineNo">059</span>  private boolean enabled;<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public TransitPeerSyncReplicationStateProcedure() {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  }<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  public TransitPeerSyncReplicationStateProcedure(String peerId, SyncReplicationState state) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    super(peerId);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this.toState = state;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  @Override<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public PeerOperationType getPeerOperationType() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    return PeerOperationType.TRANSIT_SYNC_REPLICATION_STATE;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    super.serializeStateData(serializer);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    TransitPeerSyncReplicationStateStateData.Builder builder =<a name="line.77"></a>
-<span class="sourceLineNo">078</span>        TransitPeerSyncReplicationStateStateData.newBuilder()<a name="line.78"></a>
-<span class="sourceLineNo">079</span>          .setToState(ReplicationPeerConfigUtil.toSyncReplicationState(toState));<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (fromState != null) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      builder.setFromState(ReplicationPeerConfigUtil.toSyncReplicationState(fromState));<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    serializer.serialize(builder.build());<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    super.deserializeStateData(serializer);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    TransitPeerSyncReplicationStateStateData data =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        serializer.deserialize(TransitPeerSyncReplicationStateStateData.class);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    toState = ReplicationPeerConfigUtil.toSyncReplicationState(data.getToState());<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    if (data.hasFromState()) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      fromState = ReplicationPeerConfigUtil.toSyncReplicationState(data.getFromState());<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>  @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected PeerSyncReplicationStateTransitionState getState(int stateId) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    return PeerSyncReplicationStateTransitionState.forNumber(stateId);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected int getStateId(PeerSyncReplicationStateTransitionState state) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    return state.getNumber();<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>  @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected PeerSyncReplicationStateTransitionState getInitialState() {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    return PeerSyncReplicationStateTransitionState.PRE_PEER_SYNC_REPLICATION_STATE_TRANSITION;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @VisibleForTesting<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected void preTransit(MasterProcedureEnv env) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    if (cpHost != null) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      cpHost.preTransitReplicationPeerSyncReplicationState(peerId, toState);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    ReplicationPeerDescription desc =<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      env.getReplicationPeerManager().preTransitPeerSyncReplicationState(peerId, toState);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    if (toState == SyncReplicationState.ACTIVE) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      Path remoteWALDirForPeer =<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        ReplicationUtils.getPeerRemoteWALDir(desc.getPeerConfig().getRemoteWALDir(), peerId);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      // check whether the remote wal directory is present<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      if (!remoteWALDirForPeer.getFileSystem(env.getMasterConfiguration())<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        .exists(remoteWALDirForPeer)) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        throw new DoNotRetryIOException(<a name="line.126"></a>
-<span class="sourceLineNo">127</span>          "The remote WAL directory " + remoteWALDirForPeer + " does not exist");<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    fromState = desc.getSyncReplicationState();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    enabled = desc.isEnabled();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private void postTransit(MasterProcedureEnv env) throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    LOG.info(<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      "Successfully transit current cluster state from {} to {} for sync replication peer {}",<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      fromState, toState, peerId);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    if (cpHost != null) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      env.getMasterCoprocessorHost().postTransitReplicationPeerSyncReplicationState(peerId,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        fromState, toState);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @VisibleForTesting<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  protected void reopenRegions(MasterProcedureEnv env) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    addChildProcedure(<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      env.getReplicationPeerManager().getPeerConfig(peerId).get().getTableCFsMap().keySet().stream()<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        .map(ReopenTableRegionsProcedure::new).toArray(ReopenTableRegionsProcedure[]::new));<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  @VisibleForTesting<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected void createDirForRemoteWAL(MasterProcedureEnv env) throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    MasterFileSystem mfs = env.getMasterFileSystem();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    Path remoteWALDir = new Path(mfs.getWALRootDir(), ReplicationUtils.REMOTE_WAL_DIR_NAME);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Path remoteWALDirForPeer = ReplicationUtils.getPeerRemoteWALDir(remoteWALDir, peerId);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    FileSystem walFs = mfs.getWALFileSystem();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    if (walFs.exists(remoteWALDirForPeer)) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      LOG.warn("Wal dir {} already exists, usually this should not happen, continue anyway",<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        remoteWALDirForPeer);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    } else if (!walFs.mkdirs(remoteWALDirForPeer)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      throw new IOException("Failed to create remote wal dir " + remoteWALDirForPeer);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<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>  private void setNextStateAfterRefreshBegin() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    if (fromState.equals(SyncReplicationState.ACTIVE)) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      setNextState(toState.equals(SyncReplicationState.STANDBY)<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        ? PeerSyncReplicationStateTransitionState.REMOVE_ALL_REPLICATION_QUEUES_IN_PEER<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        : PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    } else if (fromState.equals(SyncReplicationState.DOWNGRADE_ACTIVE)) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      setNextState(toState.equals(SyncReplicationState.STANDBY)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        ? PeerSyncReplicationStateTransitionState.REMOVE_ALL_REPLICATION_QUEUES_IN_PEER<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        : PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    } else {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      assert toState.equals(SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      setNextState(PeerSyncReplicationStateTransitionState.REPLAY_REMOTE_WAL_IN_PEER);<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>  private void setNextStateAfterRefreshEnd() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (toState == SyncReplicationState.STANDBY) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      setNextState(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        enabled ? PeerSyncReplicationStateTransitionState.SYNC_REPLICATION_SET_PEER_ENABLED<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          : PeerSyncReplicationStateTransitionState.CREATE_DIR_FOR_REMOTE_WAL);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      setNextState(<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        PeerSyncReplicationStateTransitionState.POST_PEER_SYNC_REPLICATION_STATE_TRANSITION);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  private void replayRemoteWAL(boolean serial) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    addChildProcedure(new RecoverStandbyProcedure(peerId, serial));<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  @VisibleForTesting<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  protected void setPeerNewSyncReplicationState(MasterProcedureEnv env)<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      throws ReplicationException {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    env.getReplicationPeerManager().setPeerNewSyncReplicationState(peerId, toState);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    if (toState.equals(SyncReplicationState.STANDBY) &amp;&amp; enabled) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // disable the peer if we are going to transit to STANDBY state, as we need to remove<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      // all the pending replication files. If we do not disable the peer and delete the wal<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // queues on zk directly, RS will get NoNode exception when updating the wal position<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // and crash.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      env.getReplicationPeerManager().disablePeer(peerId);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  @VisibleForTesting<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  protected void removeAllReplicationQueues(MasterProcedureEnv env) throws ReplicationException {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    env.getReplicationPeerManager().removeAllQueues(peerId);<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>  @VisibleForTesting<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  protected void transitPeerSyncReplicationState(MasterProcedureEnv env)<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      throws ReplicationException {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    env.getReplicationPeerManager().transitPeerSyncReplicationState(peerId, toState);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  @Override<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  protected Flow executeFromState(MasterProcedureEnv env,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      PeerSyncReplicationStateTransitionState state) throws ProcedureSuspendedException {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    switch (state) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      case PRE_PEER_SYNC_REPLICATION_STATE_TRANSITION:<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        try {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          preTransit(env);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        } catch (IOException e) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          LOG.warn("Failed to call pre CP hook or the pre check is failed for peer {} " +<a name="line.228"></a>
-<span class="sourceLineNo">229</span>            "when transiting sync replication peer state to {}, " +<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            "mark the procedure as failure and give up", peerId, toState, e);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          setFailure("master-transit-peer-sync-replication-state", e);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          return Flow.NO_MORE_STATE;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        setNextState(PeerSyncReplicationStateTransitionState.SET_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        return Flow.HAS_MORE_STATE;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      case SET_PEER_NEW_SYNC_REPLICATION_STATE:<a name="line.236"></a>
-<span class="sourceLineNo">237</span>        try {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          setPeerNewSyncReplicationState(env);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        } catch (ReplicationException e) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          LOG.warn(<a name="line.241"></a>
-<span class="sourceLineNo">242</span>            "Failed to update peer storage for peer {} when starting transiting sync " +<a name="line.242"></a>
-<span class="sourceLineNo">243</span>                "replication peer state from {} to {}, sleep {} secs and retry",<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          throw suspend(backoff);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        attempts = 0;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        setNextState(<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          PeerSyncReplicationStateTransitionState.REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_BEGIN);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        return Flow.HAS_MORE_STATE;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      case REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_BEGIN:<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          .map(sn -&gt; new RefreshPeerProcedure(peerId, getPeerOperationType(), sn, 0))<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          .toArray(RefreshPeerProcedure[]::new));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        setNextStateAfterRefreshBegin();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        return Flow.HAS_MORE_STATE;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      case REPLAY_REMOTE_WAL_IN_PEER:<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        replayRemoteWAL(env.getReplicationPeerManager().getPeerConfig(peerId).get().isSerial());<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        setNextState(<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          PeerSyncReplicationStateTransitionState.TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return Flow.HAS_MORE_STATE;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      case REMOVE_ALL_REPLICATION_QUEUES_IN_PEER:<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        try {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          removeAllReplicationQueues(env);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        } catch (ReplicationException e) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          LOG.warn(<a name="line.267"></a>
-<span class="sourceLineNo">268</span>            "Failed to remove all replication queues peer {} when starting transiting" +<a name="line.268"></a>
-<span class="sourceLineNo">269</span>                " sync replication peer state from {} to {}, sleep {} secs and retry",<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          throw suspend(backoff);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        attempts = 0;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        setNextState(fromState.equals(SyncReplicationState.ACTIVE)<a name="line.274"></a>
-<span class="sourceLineNo">275</span>          ? PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER<a name="line.275"></a>
-<span class="sourceLineNo">276</span>          : PeerSyncReplicationStateTransitionState.TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        return Flow.HAS_MORE_STATE;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      case REOPEN_ALL_REGIONS_IN_PEER:<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        reopenRegions(env);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        setNextState(<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          PeerSyncReplicationStateTransitionState.TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        return Flow.HAS_MORE_STATE;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      case TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE:<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          transitPeerSyncReplicationState(env);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        } catch (ReplicationException e) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          LOG.warn(<a name="line.288"></a>
-<span class="sourceLineNo">289</span>            "Failed to update peer storage for peer {} when ending transiting sync " +<a name="line.289"></a>
-<span class="sourceLineNo">290</span>                "replication peer state from {} to {}, sleep {} secs and retry",<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          throw suspend(backoff);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        attempts = 0;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        setNextState(<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          PeerSyncReplicationStateTransitionState.REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_END);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        return Flow.HAS_MORE_STATE;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      case REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_END:<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.299"></a>
-<span class="sourceLineNo">300</span>          .map(sn -&gt; new RefreshPeerProcedure(peerId, getPeerOperationType(), sn, 1))<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          .toArray(RefreshPeerProcedure[]::new));<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        setNextStateAfterRefreshEnd();<a name="line.302"></a>
+<span class="sourceLineNo">061</span>  private boolean serial;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public TransitPeerSyncReplicationStateProcedure() {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public TransitPeerSyncReplicationStateProcedure(String peerId, SyncReplicationState state) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    super(peerId);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.toState = state;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public PeerOperationType getPeerOperationType() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    return PeerOperationType.TRANSIT_SYNC_REPLICATION_STATE;<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>  @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    super.serializeStateData(serializer);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    TransitPeerSyncReplicationStateStateData.Builder builder =<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      TransitPeerSyncReplicationStateStateData.newBuilder()<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        .setToState(ReplicationPeerConfigUtil.toSyncReplicationState(toState));<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    if (fromState != null) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      builder.setFromState(ReplicationPeerConfigUtil.toSyncReplicationState(fromState));<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    serializer.serialize(builder.build());<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    super.deserializeStateData(serializer);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TransitPeerSyncReplicationStateStateData data =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      serializer.deserialize(TransitPeerSyncReplicationStateStateData.class);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    toState = ReplicationPeerConfigUtil.toSyncReplicationState(data.getToState());<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    if (data.hasFromState()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      fromState = ReplicationPeerConfigUtil.toSyncReplicationState(data.getFromState());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  @Override<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected PeerSyncReplicationStateTransitionState getState(int stateId) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return PeerSyncReplicationStateTransitionState.forNumber(stateId);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  protected int getStateId(PeerSyncReplicationStateTransitionState state) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return state.getNumber();<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>  @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  protected PeerSyncReplicationStateTransitionState getInitialState() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    return PeerSyncReplicationStateTransitionState.PRE_PEER_SYNC_REPLICATION_STATE_TRANSITION;<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>  @VisibleForTesting<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  protected void preTransit(MasterProcedureEnv env) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    if (cpHost != null) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      cpHost.preTransitReplicationPeerSyncReplicationState(peerId, toState);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    ReplicationPeerDescription desc =<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      env.getReplicationPeerManager().preTransitPeerSyncReplicationState(peerId, toState);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    if (toState == SyncReplicationState.ACTIVE) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      Path remoteWALDirForPeer =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        ReplicationUtils.getPeerRemoteWALDir(desc.getPeerConfig().getRemoteWALDir(), peerId);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      // check whether the remote wal directory is present<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (!remoteWALDirForPeer.getFileSystem(env.getMasterConfiguration())<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        .exists(remoteWALDirForPeer)) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        throw new DoNotRetryIOException(<a name="line.128"></a>
+<span class="sourceLineNo">129</span>          "The remote WAL directory " + remoteWALDirForPeer + " does not exist");<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    fromState = desc.getSyncReplicationState();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    enabled = desc.isEnabled();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    serial = desc.getPeerConfig().isSerial();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  private void postTransit(MasterProcedureEnv env) throws IOException {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    LOG.info(<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      "Successfully transit current cluster state from {} to {} for sync replication peer {}",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      fromState, toState, peerId);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    if (cpHost != null) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      env.getMasterCoprocessorHost().postTransitReplicationPeerSyncReplicationState(peerId,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        fromState, toState);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  @VisibleForTesting<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  protected void reopenRegions(MasterProcedureEnv env) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    addChildProcedure(<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      env.getReplicationPeerManager().getPeerConfig(peerId).get().getTableCFsMap().keySet().stream()<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        .map(ReopenTableRegionsProcedure::new).toArray(ReopenTableRegionsProcedure[]::new));<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @VisibleForTesting<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected void createDirForRemoteWAL(MasterProcedureEnv env) throws IOException {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    MasterFileSystem mfs = env.getMasterFileSystem();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    Path remoteWALDir = new Path(mfs.getWALRootDir(), ReplicationUtils.REMOTE_WAL_DIR_NAME);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    Path remoteWALDirForPeer = ReplicationUtils.getPeerRemoteWALDir(remoteWALDir, peerId);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    FileSystem walFs = mfs.getWALFileSystem();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    if (walFs.exists(remoteWALDirForPeer)) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      LOG.warn("Wal dir {} already exists, usually this should not happen, continue anyway",<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        remoteWALDirForPeer);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } else if (!walFs.mkdirs(remoteWALDirForPeer)) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      throw new IOException("Failed to create remote wal dir " + remoteWALDirForPeer);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  private void setNextStateAfterRefreshBegin() {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (fromState.equals(SyncReplicationState.ACTIVE)) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      setNextState(toState.equals(SyncReplicationState.STANDBY)<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        ? PeerSyncReplicationStateTransitionState.REMOVE_ALL_REPLICATION_QUEUES_IN_PEER<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        : PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    } else if (fromState.equals(SyncReplicationState.DOWNGRADE_ACTIVE)) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      setNextState(toState.equals(SyncReplicationState.STANDBY)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        ? PeerSyncReplicationStateTransitionState.REMOVE_ALL_REPLICATION_QUEUES_IN_PEER<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        : PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    } else {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      assert toState.equals(SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      // for serial peer, we need to reopen all the regions and then update the last pushed sequence<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      // id, before replaying any remote wals, so that the serial replication will not be stuck, and<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      // also guarantee the order when replicating the remote wal back.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      setNextState(serial ? PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        : PeerSyncReplicationStateTransitionState.REPLAY_REMOTE_WAL_IN_PEER);<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><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  private void setNextStateAfterRefreshEnd() {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    if (toState == SyncReplicationState.STANDBY) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      setNextState(<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        enabled ? PeerSyncReplicationStateTransitionState.SYNC_REPLICATION_SET_PEER_ENABLED<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          : PeerSyncReplicationStateTransitionState.CREATE_DIR_FOR_REMOTE_WAL);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } else if (fromState == SyncReplicationState.STANDBY) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      assert toState.equals(SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      setNextState(serial &amp;&amp; enabled<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        ? PeerSyncReplicationStateTransitionState.SYNC_REPLICATION_SET_PEER_ENABLED<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        : PeerSyncReplicationStateTransitionState.POST_PEER_SYNC_REPLICATION_STATE_TRANSITION);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    } else {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      setNextState(<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        PeerSyncReplicationStateTransitionState.POST_PEER_SYNC_REPLICATION_STATE_TRANSITION);<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>  private void replayRemoteWAL(boolean serial) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    addChildProcedure(new RecoverStandbyProcedure(peerId, serial));<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @VisibleForTesting<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  protected void setPeerNewSyncReplicationState(MasterProcedureEnv env)<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      throws ReplicationException {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    if (toState.equals(SyncReplicationState.STANDBY) ||<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      (fromState.equals(SyncReplicationState.STANDBY) &amp;&amp; serial) &amp;&amp; enabled) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Disable the peer if we are going to transit to STANDBY state, as we need to remove<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      // all the pending replication files. If we do not disable the peer and delete the wal<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      // queues on zk directly, RS will get NoNode exception when updating the wal position<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      // and crash.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      // Disable the peer if we are going to transit from STANDBY to DOWNGRADE_ACTIVE, and the<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      // replication is serial, as we need to update the lastPushedSequence id after we reopen all<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      // the regions, and for performance reason here we will update in batch, without using CAS, if<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      // we are still replicating at RS side, we may accidentally update the last pushed sequence id<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // to a less value and cause the replication to be stuck.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      env.getReplicationPeerManager().disablePeer(peerId);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    env.getReplicationPeerManager().setPeerNewSyncReplicationState(peerId, toState);<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>  @VisibleForTesting<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  protected void removeAllReplicationQueues(MasterProcedureEnv env) throws ReplicationException {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    env.getReplicationPeerManager().removeAllQueues(peerId);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  @VisibleForTesting<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  protected void transitPeerSyncReplicationState(MasterProcedureEnv env)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      throws ReplicationException {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    env.getReplicationPeerManager().transitPeerSyncReplicationState(peerId, toState);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  protected Flow executeFromState(MasterProcedureEnv env,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PeerSyncReplicationStateTransitionState state) throws ProcedureSuspendedException {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    switch (state) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      case PRE_PEER_SYNC_REPLICATION_STATE_TRANSITION:<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        try {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          preTransit(env);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        } catch (IOException e) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          LOG.warn("Failed to call pre CP hook or the pre check is failed for peer {} " +<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            "when transiting sync replication peer state to {}, " +<a name="line.247"></a>
+<span class="sourceLineNo">248</span>            "mark the procedure as failure and give up", peerId, toState, e);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          setFailure("master-transit-peer-sync-replication-state", e);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          return Flow.NO_MORE_STATE;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        setNextState(PeerSyncReplicationStateTransitionState.SET_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        return Flow.HAS_MORE_STATE;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      case SET_PEER_NEW_SYNC_REPLICATION_STATE:<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          setPeerNewSyncReplicationState(env);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        } catch (ReplicationException e) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          LOG.warn(<a name="line.259"></a>
+<span class="sourceLineNo">260</span>            "Failed to update peer storage for peer {} when starting transiting sync " +<a name="line.260"></a>
+<span class="sourceLineNo">261</span>              "replication peer state from {} to {}, sleep {} secs and retry",<a name="line.261"></a>
+<span class="sourceLineNo">262</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          throw suspend(backoff);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        attempts = 0;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        setNextState(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          PeerSyncReplicationStateTransitionState.REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_BEGIN);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        return Flow.HAS_MORE_STATE;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      case REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_BEGIN:<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.270"></a>
+<span class="sourceLineNo">271</span>          .map(sn -&gt; new RefreshPeerProcedure(peerId, getPeerOperationType(), sn, 0))<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          .toArray(RefreshPeerProcedure[]::new));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        setNextStateAfterRefreshBegin();<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>      case REOPEN_ALL_REGIONS_IN_PEER:<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        reopenRegions(env);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        if (fromState.equals(SyncReplicationState.STANDBY)) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          assert serial;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          setNextState(<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            PeerSyncReplicationStateTransitionState.SYNC_REPLICATION_UPDATE_LAST_PUSHED_SEQ_ID_FOR_SERIAL_PEER);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        } else {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          setNextState(<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            PeerSyncReplicationStateTransitionState.TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        return Flow.HAS_MORE_STATE;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      case SYNC_REPLICATION_UPDATE_LAST_PUSHED_SEQ_ID_FOR_SERIAL_PEER:<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        try {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          setLastPushedSequenceId(env, env.getReplicationPeerManager().getPeerConfig(peerId).get());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        } catch (Exception e) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          LOG.warn(<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            "Failed to update last pushed sequence id for peer {} when transiting sync " +<a name="line.292"></a>
+<span class="sourceLineNo">293</span>              "replication peer state from {} to {}, sleep {} secs and retry",<a name="line.293"></a>
+<span class="sourceLineNo">294</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          throw suspend(backoff);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        setNextState(PeerSyncReplicationStateTransitionState.REPLAY_REMOTE_WAL_IN_PEER);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        return Flow.HAS_MORE_STATE;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      case REPLAY_REMOTE_WAL_IN_PEER:<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        replayRemoteWAL(env.getReplicationPeerManager().getPeerConfig(peerId).get().isSerial());<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        setNextState(<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          PeerSyncReplicationStateTransitionState.TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE);<a name="line.302"></a>
 <span class="sourceLineNo">303</span>        return Flow.HAS_MORE_STATE;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      case SYNC_REPLICATION_SET_PEER_ENABLED:<a name="line.304"></a>
+<span class="sourceLineNo">304</span>      case REMOVE_ALL_REPLICATION_QUEUES_IN_PEER:<a name="line.304"></a>
 <span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          enablePeer(env);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>          removeAllReplicationQueues(env);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>        } catch (ReplicationException e) {<a name="line.307"></a>
 <span class="sourceLineNo">308</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.308"></a>
 <span class="sourceLineNo">309</span>          LOG.warn(<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            "Failed to set peer enabled for peer {} when transiting sync replication peer " +<a name="line.310"></a>
-<span class="sourceLineNo">311</span>                "state from {} to {}, sleep {} secs and retry",<a name="line.311"></a>
+<span class="sourceLineNo">310</span>            "Failed to remove all replication queues peer {} when starting transiting" +<a name="line.310"></a>
+<span class="sourceLineNo">311</span>              " sync replication peer state from {} to {}, sleep {} secs and retry",<a name="line.311"></a>
 <span class="sourceLineNo">312</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.312"></a>
 <span class="sourceLineNo">313</span>          throw suspend(backoff);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>        }<a name="line.314"></a>
 <span class="sourceLineNo">315</span>        attempts = 0;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        setNextState(<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          PeerSyncReplicationStateTransitionState.SYNC_REPLICATION_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        return Flow.HAS_MORE_STATE;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      case SYNC_REPLICATION_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        refreshPeer(env, PeerOperationType.ENABLE);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        setNextState(PeerSyncReplicationStateTransitionState.CREATE_DIR_FOR_REMOTE_WAL);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        return Flow.HAS_MORE_STATE;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      case CREATE_DIR_FOR_REMOTE_WAL:<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        try {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>          createDirForRemoteWAL(env);<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(attempts);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          LOG.warn(<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            "Failed to create remote wal dir for peer {} when transiting sync replication " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                "peer state from {} to {}, sleep {} secs and retry",<a name="line.330"></a>
-<span class="sourceLineNo">331</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          throw suspend(backoff);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        attempts = 0;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        setNextState(<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          PeerSyncReplicationStateTransitionState.POST_PEER_SYNC_REPLICATION_STATE_TRANSITION);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        return Flow.HAS_MORE_STATE;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      case POST_PEER_SYNC_REPLICATION_STATE_TRANSITION:<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        try {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          postTransit(env);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        } catch (IOException e) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          LOG.warn(<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            "Failed to call post CP hook for peer {} when transiting sync replication " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>              "peer state from {} to {}, ignore since the procedure has already done",<a name="line.344"></a>
-<span class="sourceLineNo">345</span>            peerId, fromState, toState, e);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        return Flow.NO_MORE_STATE;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      default:<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        throw new UnsupportedOperationException("unhandled state=" + state);<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>}<a name="line.352"></a>
+<span class="sourceLineNo">316</span>        setNextState(fromState.equals(SyncReplicationState.ACTIVE)<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          ? PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          : PeerSyncReplicationStateTransitionState.TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE);<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 TRANSIT_PEER_NEW_SYNC_REPLICATION_STATE:<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        try {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          transitPeerSyncReplicationState(env);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        } catch (ReplicationException e) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          LOG.warn(<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            "Failed to update peer storage for peer {} when ending transiting sync " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              "replication peer state from {} to {}, sleep {} secs and retry",<a name="line.327"></a>
+<span class="sourceLineNo">328</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          throw suspend(backoff);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        attempts = 0;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        setNextState(<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          PeerSyncReplicationStateTransitionState.REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_END);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        return Flow.HAS_MORE_STATE;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      case REFRESH_PEER_SYNC_REPLICATION_STATE_ON_RS_END:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          .map(sn -&gt; new RefreshPeerProcedure(peerId, getPeerOperationType(), sn, 1))<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          .toArray(RefreshPeerProcedure[]::new));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        setNextStateAfterRefreshEnd();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        return Flow.HAS_MORE_STATE;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      case SYNC_REPLICATION_SET_PEER_ENABLED:<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        try {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          enablePeer(env);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        } catch (ReplicationException e) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          LOG.warn(<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            "Failed to set peer enabled for peer {} when transiting sync replication peer " +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>              "state from {} to {}, sleep {} secs and retry",<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          throw suspend(backoff);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        attempts = 0;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        setNextState(<a name="line.353"></a>
+<span class="sourceLineNo">354</span>          PeerSyncReplicationStateTransitionState.SYNC_REPLICATION_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        return Flow.HAS_MORE_STATE;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      case SYNC_REPLICATION_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        refreshPeer(env, PeerOperationType.ENABLE);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        setNextState(PeerSyncReplicationStateTransitionState.CREATE_DIR_FOR_REMOTE_WAL);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        return Flow.HAS_MORE_STATE;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      case CREATE_DIR_FOR_REMOTE_WAL:<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          createDirForRemoteWAL(env);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        } catch (IOException e) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          LOG.warn(<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            "Failed to create remote wal dir for peer {} when transiting sync replication " +<a name="line.366"></a>
+<span class="sourceLineNo">367</span>              "peer state from {} to {}, sleep {} secs and retry",<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            peerId, fromState, toState, backoff / 1000, e);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          throw suspend(backoff);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        attempts = 0;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        setNextState(<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          PeerSyncReplicationStateTransitionState.POST_PEER_SYNC_REPLICATION_STATE_TRANSITION);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        return Flow.HAS_MORE_STATE;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      case POST_PEER_SYNC_REPLICATION_STATE_TRANSITION:<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          postTransit(env);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        } catch (IOException e) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          LOG.warn(<a name="line.379"></a>
+<span class="sourceLineNo">380</span>            "Failed to call post CP hook for peer {} when transiting sync replication " +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>              "peer state from {} to {}, ignore since the procedure has already done",<a name="line.381"></a>
+<span class="sourceLineNo">382</span>            peerId, fromState, toState, e);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        }<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        return Flow.NO_MORE_STATE;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      default:<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>}<a name="line.389"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index cd9bb40..0e270ce 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 6537196..5be5f3f 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 6f68997..59ea667 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index a5a4a99..638cb1c 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index c283d8e..62556cb 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 74edfb7..d7f7f8a 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index ecffb87..287a766 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 402896c..d05e913 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index ba638e0..231c706 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index e1d07f8..58735c9 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 4dcdd24..080a7dd 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 0f33ac6..3d80b30 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index b22451c..c250f7f 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 8109c10..f8db376 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index a29a753..fff2bf2 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index e08887b..f16a538 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index fec9348..60cc064 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index b2a71e8..5a84f37 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 468cf15..fad4547 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 4fe15c6..824fe49 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="20181130" />
+    <meta name="Date-Revision-yyyymmdd" content="20181201" />
     <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-30</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-01</li>
             </p>
                 </div>
 


[09/28] hbase-site git commit: Published site at d525ec6a1214f97bda560095f9775ca96d82f030.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f848663d/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 b0f2576..4635d99 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
@@ -30,571 +30,585 @@
 <span class="sourceLineNo">022</span><a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.InterruptedIOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.net.SocketTimeoutException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.NavigableMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Random;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedSet;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutionException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Executors;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.Future;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.conf.Configuration;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.After;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.Rule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.rules.ExpectedException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<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>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>public abstract class TestAssignmentManagerBase {<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  @Rule<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public TestName name = new TestName();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @Rule<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected static final int PROC_NTHREADS = 64;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected HBaseTestingUtility util;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected MockMasterServices master;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected AssignmentManager am;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  // Simple executor to run some simple tasks.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  protected ScheduledExecutorService executor;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.106"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.SocketTimeoutException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.NavigableMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Random;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedSet;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentSkipListSet;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.ExecutionException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.Executors;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.Future;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.TimeUnit;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerMetricsBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.YouAreDeadException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.procedure.RSProcedureDispatcher;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.procedure2.ProcedureMetrics;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.regionserver.RegionServerAbortedException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<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.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.After;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Rule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.rules.ExpectedException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<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> * Base class for AM test.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>public abstract class TestAssignmentManagerBase {<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAssignmentManagerBase.class);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @Rule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public final ExpectedException exception = ExpectedException.none();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static final int PROC_NTHREADS = 64;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static final int NREGIONS = 1 * 1000;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static final int NSERVERS = Math.max(1, NREGIONS / 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected HBaseTestingUtility util;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  protected MockRSProcedureDispatcher rsDispatcher;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  protected MockMasterServices master;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected AssignmentManager am;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected NavigableMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt; regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    new ConcurrentSkipListMap&lt;ServerName, SortedSet&lt;byte[]&gt;&gt;();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // Simple executor to run some simple tasks.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected ScheduledExecutorService executor;<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  protected long assignSubmittedCount = 0;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  protected long assignFailedCount = 0;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected long unassignSubmittedCount = 0;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected long unassignFailedCount = 0;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected int getAssignMaxAttempts() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    // Have many so we succeed eventually.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Before<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void setUp() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    util = new HBaseTestingUtility();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    setupConfiguration(util.getConfiguration());<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    master.start(NSERVERS, rsDispatcher);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    am = master.getAssignmentManager();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    setUpMeta();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected void setUpMeta() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    am.wakeMetaLoadedEvent();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @After<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void tearDown() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    master.stop("tearDown");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this.executor.shutdownNow();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            execOpenRegion(server, openReq);<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>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return ExecuteProceduresResponse.newBuilder().build();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throws IOException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return null;<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><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<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>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    } catch (ExecutionException e) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      LOG.info("ExecutionException", e);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Exception ee = (Exception) e.getCause();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      if (ee instanceof InterruptedIOException) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          LOG.info(p.toStringDetails());<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>      throw (Exception) e.getCause();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<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>  // Helpers<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // ============================================================================================<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      final int threadId = i;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      threads[i] = new Thread() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        public void run() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>          int n = (procs.length / threads.length);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          int start = threadId * n;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          int stop = start + n;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            procs[j] = createAndSubmitAssign(tableName, j);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      };<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      threads[i].start();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      threads[i].join();<a name="line.224"></a>
+<span class="sourceLineNo">108</span>  protected ProcedureMetrics assignProcMetrics;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  protected ProcedureMetrics unassignProcMetrics;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected long assignSubmittedCount = 0;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  protected long assignFailedCount = 0;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  protected long unassignSubmittedCount = 0;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected long unassignFailedCount = 0;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  protected int getAssignMaxAttempts() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    // Have many so we succeed eventually.<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return 100;<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>  protected void setupConfiguration(Configuration conf) throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FSUtils.setRootDir(conf, util.getDataTestDir());<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.setBoolean(WALProcedureStore.USE_HSYNC_CONF_KEY, false);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt(WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY, 10);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, PROC_NTHREADS);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.setInt(RSProcedureDispatcher.RS_RPC_STARTUP_WAIT_TIME_CONF_KEY, 1000);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    conf.setInt(AssignmentManager.ASSIGN_MAX_ATTEMPTS, getAssignMaxAttempts());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Before<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public void setUp() throws Exception {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    util = new HBaseTestingUtility();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.executor = Executors.newSingleThreadScheduledExecutor();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    setupConfiguration(util.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    master = new MockMasterServices(util.getConfiguration(), this.regionsToRegionServers);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    rsDispatcher = new MockRSProcedureDispatcher(master);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    master.start(NSERVERS, rsDispatcher);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    am = master.getAssignmentManager();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    assignProcMetrics = am.getAssignmentManagerMetrics().getAssignProcMetrics();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    unassignProcMetrics = am.getAssignmentManagerMetrics().getUnassignProcMetrics();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    setUpMeta();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  protected void setUpMeta() throws Exception {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    rsDispatcher.setMockRsExecutor(new GoodRsExecutor());<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    am.assign(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    am.wakeMetaLoadedEvent();<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>  @After<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void tearDown() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    master.stop("tearDown");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    this.executor.shutdownNow();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected class NoopRsExecutor implements MockRSExecutor {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    public ExecuteProceduresResponse sendRequest(ServerName server,<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        ExecuteProceduresRequest request) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      if (request.getOpenRegionCount() &gt; 0) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        for (OpenRegionRequest req : request.getOpenRegionList()) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          for (RegionOpenInfo openReq : req.getOpenInfoList()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            execOpenRegion(server, openReq);<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>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      if (request.getCloseRegionCount() &gt; 0) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        for (CloseRegionRequest req : request.getCloseRegionList()) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>          execCloseRegion(server, req.getRegion().getValue().toByteArray());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return ExecuteProceduresResponse.newBuilder().build();<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>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo regionInfo)<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        throws IOException {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      return null;<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>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        throws IOException {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      return null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<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>  protected Future&lt;byte[]&gt; submitProcedure(final Procedure&lt;MasterProcedureEnv&gt; proc) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return ProcedureSyncWait.submitProcedure(master.getMasterProcedureExecutor(), proc);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>  protected byte[] waitOnFuture(final Future&lt;byte[]&gt; future) throws Exception {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    try {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return future.get(60, TimeUnit.SECONDS);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    } catch (ExecutionException e) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      LOG.info("ExecutionException", e);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Exception ee = (Exception) e.getCause();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (ee instanceof InterruptedIOException) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        for (Procedure&lt;?&gt; p : this.master.getMasterProcedureExecutor().getProcedures()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          LOG.info(p.toStringDetails());<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw (Exception) e.getCause();<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>  // ============================================================================================<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  // Helpers<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  // ============================================================================================<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected void bulkSubmit(TransitRegionStateProcedure[] procs) throws Exception {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Thread[] threads = new Thread[PROC_NTHREADS];<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      final int threadId = i;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      threads[i] = new Thread() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        @Override<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        public void run() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          TableName tableName = TableName.valueOf("table-" + threadId);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          int n = (procs.length / threads.length);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          int start = threadId * n;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          int stop = start + n;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          for (int j = start; j &lt; stop; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>            procs[j] = createAndSubmitAssign(tableName, j);<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>      };<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      threads[i].start();<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; threads.length; ++i) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      threads[i].join();<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return proc;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<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>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    TransitRegionStateProcedure proc;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    regionNode.lock();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assertFalse(regionNode.isInTransition());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      proc = TransitRegionStateProcedure<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      regionNode.setProcedure(proc);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      regionNode.unlock();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    return proc;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<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, 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(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>
-<span class="sourceLineNo">273</span>  protected void doCrash(final ServerName serverName) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<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>  protected void doRestart(final ServerName serverName) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master.restartRegionServer(serverName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    } catch (IOException e) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.285"></a>
-<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>      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>      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>  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">229</span>    for (int i = procs.length - 1; i &gt;= 0 &amp;&amp; procs[i] == null; --i) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procs[i] = createAndSubmitAssign(TableName.valueOf("table-sync"), i);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  protected TransitRegionStateProcedure createAndSubmitAssign(TableName tableName, int regionId) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    RegionInfo hri = createRegionInfo(tableName, regionId);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TransitRegionStateProcedure proc = createAssignProcedure(hri);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    master.getMasterProcedureExecutor().submitProcedure(proc);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return proc;<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>  protected RegionInfo createRegionInfo(final TableName tableName, final long regionId) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return RegionInfoBuilder.newBuilder(tableName).setStartKey(Bytes.toBytes(regionId))<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      .setEndKey(Bytes.toBytes(regionId + 1)).setSplit(false).setRegionId(0).build();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  protected TransitRegionStateProcedure createAssignProcedure(RegionInfo hri) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return am.createAssignProcedures(Arrays.asList(hri))[0];<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected TransitRegionStateProcedure createUnassignProcedure(RegionInfo hri) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    RegionStateNode regionNode = am.getRegionStates().getRegionStateNode(hri);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    TransitRegionStateProcedure proc;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    regionNode.lock();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    try {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      assertFalse(regionNode.isInTransition());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      proc = TransitRegionStateProcedure<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .unassign(master.getMasterProcedureExecutor().getEnvironment(), hri);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      regionNode.setProcedure(proc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    } finally {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      regionNode.unlock();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return proc;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>  protected void sendTransitionReport(final ServerName serverName,<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      final org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      final TransitionCode state, long seqId) throws IOException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    ReportRegionStateTransitionRequest.Builder req =<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    req.setServer(ProtobufUtil.toServerName(serverName));<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    req.addTransition(RegionStateTransition.newBuilder().addRegionInfo(regionInfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      .setTransitionCode(state).setOpenSeqNum(seqId).build());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    am.reportRegionStateTransition(req.build());<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>  protected void doCrash(final ServerName serverName) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    this.master.getServerManager().moveFromOnlineToDeadServers(serverName);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    this.am.submitServerCrash(serverName, false/* No WALs here */);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // add a new server to avoid killing all the region servers which may hang the UTs<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    int maxPort = this.master.getServerManager().getOnlineServersList().stream()<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      .mapToInt(ServerName::getPort).max().getAsInt();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    ServerName newSn = ServerName.valueOf("localhost", 100 + maxPort + 1, 1);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    try {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      this.master.getServerManager().regionServerReport(newSn, ServerMetricsBuilder.of(newSn));<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } catch (YouAreDeadException e) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // should not happen<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      throw new UncheckedIOException(e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<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>  protected void doRestart(final ServerName serverName) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.master.restartRegionServer(serverName);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } catch (IOException e) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      LOG.warn("Can not restart RS with new startcode");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  protected class GoodRsExecutor extends NoopRsExecutor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    protected RegionOpeningState execOpenRegion(ServerName server, RegionOpenInfo openReq)<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      RegionInfo hri = ProtobufUtil.toRegionInfo(openReq.getRegion());<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      long previousOpenSeqNum =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        am.getRegionStates().getOrCreateRegionStateNode(hri).getOpenSeqNum();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      sendTransitionReport(server, openReq.getRegion(), TransitionCode.OPENED,<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        previousOpenSeqNum + 2);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      // Concurrency?<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      // Now update the state of our cluster in regionsToRegionServers.<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      SortedSet&lt;byte[]&gt; regions = regionsToRegionServers.get(server);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      if (regions == null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        regions = new ConcurrentSkipListSet&lt;byte[]&gt;(Bytes.BYTES_COMPARATOR);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        regionsToRegionServers.put(server, regions);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (regions.contains(hri.getRegionName())) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        throw new UnsupportedOperationException(hri.getRegionNameAsString());<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      regions.add(hri.getRegionName());<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      return RegionOpeningState.OPENED;<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>    @Override<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    protected CloseRegionResponse execCloseRegion(ServerName server, byte[] regionName)<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      RegionInfo hri = am.getRegionInfo(regionName);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      sendTransitionReport(server, ProtobufUtil.toRegionInfo(hri), TransitionCode.CLOSED, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      return CloseRegionResponse.newBuilder().setClosed(true).build();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  protected static class ServerNotYetRunningRsExecutor implements MockRSExecutor {<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">335</span>      throw new ServerNotRunningYetException("wait on server startup");<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">339</span>  protected static class FaultyRsExecutor implements MockRSExecutor {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    private final IOException exception;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    public FaultyRsExecutor(final IOException exception) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.exception = exception;<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>    @Override<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw exception;<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>  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">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  protected class SocketTimeoutRsExecutor extends GoodRsExecutor {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private final int maxSocketTimeoutRetries;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private final int maxServerRetries;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    private ServerName lastServer;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    private int sockTimeoutRetries;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    private int serverRetries;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public SocketTimeoutRsExecutor(int maxSocketTimeoutRetries, int maxServerRetries) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.maxServerRetries = maxServerRetries;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.maxSocketTimeoutRetries = maxSocketTimeoutRetries;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public ExecuteProceduresResponse sendRequest(ServerName server, ExecuteProceduresRequest req)<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        throws IOException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      // SocketTimeoutException should be a temporary problem<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      // unless the server will be declared dead.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      if (sockTimeoutRetries++ &lt; maxSocketTimeoutRetries) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        if (sockTimeoutRetries == 1) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          assertNotEquals(lastServer, server);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        lastServer = server;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>        LOG.debug("Socket timeout for server=" + server + " retries=" + sockTimeoutRetries);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        throw new SocketTimeoutException("simulate socket timeout");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      } else if (serverRetries++ &lt; maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries

<TRUNCATED>