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<Exception>() {<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<Exception>() {<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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 – 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 – 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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </dd>
@@ -71425,8 +71438,6 @@ the order they are declared.</div>
<dd> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> util,
+ org.apache.hadoop.fs.Path remoteWAL)</code> </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> util,
int end)</code> </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> util,
int start,
int end)</code> </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> util1,
<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> 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 <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 <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 <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> exception)</pre>
+<pre>public <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> 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.333">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.FaultyRsExecutor.html#line.347">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.285">GoodRsExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.287">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.301">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.309">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.GoodRsExecutor.html#line.323">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
byte[] 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 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 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.437">invocations</a></pre>
+<pre>private 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.435">HangOnCloseThenRSCrashExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.440">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangOnCloseThenRSCrashExecutor.html#line.454">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
byte[] 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.381">invocations</a></pre>
+<pre>private 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.380">HangThenRSCrashExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.384">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSCrashExecutor.html#line.398">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.412">invocations</a></pre>
+<pre>private 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.411">HangThenRSRestartExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.415">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.HangThenRSRestartExecutor.html#line.429">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html#line.548">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSExecutor.html#line.562">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.570">MockRemoteCall</a>(org.apache.hadoop.hbase.ServerName serverName,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.584">MockRemoteCall</a>(org.apache.hadoop.hbase.ServerName 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><org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure> 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.576">sendRequest</a>(org.apache.hadoop.hbase.ServerName serverName,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.MockRemoteCall.html#line.590">sendRequest</a>(org.apache.hadoop.hbase.ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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 <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 <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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.555">MockRSProcedureDispatcher</a>(org.apache.hadoop.hbase.master.MasterServices master)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.569">MockRSProcedureDispatcher</a>(org.apache.hadoop.hbase.master.MasterServices 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 void <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> mockRsExec)</pre>
+<pre>public void <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> 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.564">remoteDispatch</a>(org.apache.hadoop.hbase.ServerName serverName,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.MockRSProcedureDispatcher.html#line.578">remoteDispatch</a>(org.apache.hadoop.hbase.ServerName 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><org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure> 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.153">NoopRsExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.155">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.158">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.172">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.175">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.177">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.NoopRsExecutor.html#line.180">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
byte[] 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 <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 <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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.481">RandRsExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.485">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.499">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.501">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.515">execOpenRegion</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.534">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.RandRsExecutor.html#line.548">execCloseRegion</a>(org.apache.hadoop.hbase.ServerName server,
byte[] 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.317">ServerNotYetRunningRsExecutor</a>()</pre>
+<pre>protected <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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.319">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.ServerNotYetRunningRsExecutor.html#line.333">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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>©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 –
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 – 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 – 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 – 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 – 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 static final <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 static final <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"> </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><<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="type parameter in AbstractPeerProcedure">TState</a>></span><span class="tabEnd"> </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 static final 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 static final 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> </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<LockedResource>, Map<T, LockAndQueue>, Function<T, String>, 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> </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<String, Long>, 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<String, Long>, 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> </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> </dd>
@@ -69635,6 +69635,8 @@
<dd> </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> </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> </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> </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> </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<HStoreFile>)</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> </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> </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> </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> </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> </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> </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> </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> </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> </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<String, Long>)</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<String, Long>)</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> </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> </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> </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> </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> </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> </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> </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> </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><E> (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><T>, 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> 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> tsm,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tn)</code> </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> 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> env,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> lastSeqIds)</code> </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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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> 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> tsm,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tn)</code> </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><E> (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><T>, 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> 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> env,
<a href="../../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)</code> </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> 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> env,
<a href="../../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> lastSeqIds)</code> </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><E> (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><T>, 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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> util,
+ org.apache.hadoop.fs.Path remoteWAL)</code> </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> util,
int end)</code> </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> util,
int start,
int end)</code> </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> util1,
<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> 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 org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.220">getRemoteWALDir</a>(org.apache.hadoop.fs.Path 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> peerId)</pre>
+<pre>protected final org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.220">getRemoteWALDir</a>(org.apache.hadoop.fs.Path 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> 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 org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.224">getReplayRemoteWALs</a>(org.apache.hadoop.fs.Path 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> peerId)</pre>
+<pre>protected final org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#line.224">getReplayRemoteWALs</a>(org.apache.hadoop.fs.Path 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> 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 void <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> peerId,
- org.apache.hadoop.fs.Path remoteWALDir,
- <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> 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 void <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> peerId,
+ org.apache.hadoop.fs.Path remoteWALDir,
+ <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> 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 void <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> utility,
- boolean 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 void <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> utility,
+ boolean 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 void <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> util,
+ org.apache.hadoop.fs.Path 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 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 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 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 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 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 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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </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"> </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> </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 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"> </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> </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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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> </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 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 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 <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 <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 void <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 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 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </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 © 2007–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 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 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 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 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 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 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 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 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 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 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> </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 remoteWAL)</code> </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 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 <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 <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 <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.38">TestSyncReplicationRemoveRemoteWAL</a>()</pre>
+<pre>public <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.44">waitUntilDeleted</a>(org.apache.hadoop.fs.Path 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestSyncReplicationRemoveRemoteWAL.html#line.61">testRemoveRemoteWAL</a>()
+<pre>public void <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 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 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 –
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 –
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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.340">maxSocketTimeoutRetries</a></pre>
+<pre>private final 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.341">maxServerRetries</a></pre>
+<pre>private final 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 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 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.344">sockTimeoutRetries</a></pre>
+<pre>private 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.345">serverRetries</a></pre>
+<pre>private 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.347">SocketTimeoutRsExecutor</a>(int maxSocketTimeoutRetries,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.361">SocketTimeoutRsExecutor</a>(int maxSocketTimeoutRetries,
int 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 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.353">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.SocketTimeoutRsExecutor.html#line.367">sendRequest</a>(org.apache.hadoop.hbase.ServerName server,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest 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 org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.85">LOG</a></pre>
+<pre>private static final 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 org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.88">name</a></pre>
+<pre>public 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 org.junit.rules.ExpectedException <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.90">exception</a></pre>
+<pre>public final 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.92">PROC_NTHREADS</a></pre>
+<pre>protected static final 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.93">NREGIONS</a></pre>
+<pre>protected static final 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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.94">NSERVERS</a></pre>
+<pre>protected static final 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 <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 <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 <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 <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 <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 <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 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 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 <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><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><byte[]>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.100">regionsToRegionServers</a></pre>
+<pre>protected <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><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><byte[]>> <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 <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 <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 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 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 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 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 long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.108">assignSubmittedCount</a></pre>
+<pre>protected 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 long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.109">assignFailedCount</a></pre>
+<pre>protected 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 long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.110">unassignSubmittedCount</a></pre>
+<pre>protected 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 long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.111">unassignFailedCount</a></pre>
+<pre>protected 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.83">TestAssignmentManagerBase</a>()</pre>
+<pre>public <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 int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.113">getAssignMaxAttempts</a>()</pre>
+<pre>protected int <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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.118">setupConfiguration</a>(org.apache.hadoop.conf.Configuration conf)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.121">setupConfiguration</a>(org.apache.hadoop.conf.Configuration 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.128">setUp</a>()
+<pre>public void <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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.141">setUpMeta</a>()
+<pre>protected void <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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.148">tearDown</a>()
+<pre>public void <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 <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><byte[]> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.183">submitProcedure</a>(org.apache.hadoop.hbase.procedure2.Procedure<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> proc)</pre>
+<pre>protected <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><byte[]> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.186">submitProcedure</a>(org.apache.hadoop.hbase.procedure2.Procedure<org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv> 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 byte[] <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><byte[]> future)
+<pre>protected byte[] <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><byte[]> 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.205">bulkSubmit</a>(org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure[] procs)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.208">bulkSubmit</a>(org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure[] 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 org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.231">createAndSubmitAssign</a>(org.apache.hadoop.hbase.TableName tableName,
+<pre>protected org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.234">createAndSubmitAssign</a>(org.apache.hadoop.hbase.TableName tableName,
int 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 org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.238">createRegionInfo</a>(org.apache.hadoop.hbase.TableName tableName,
+<pre>protected org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.241">createRegionInfo</a>(org.apache.hadoop.hbase.TableName tableName,
long 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 org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.243">createAssignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo hri)</pre>
+<pre>protected org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.246">createAssignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo 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 org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.247">createUnassignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo hri)</pre>
+<pre>protected org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.250">createUnassignProcedure</a>(org.apache.hadoop.hbase.client.RegionInfo 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.262">sendTransitionReport</a>(org.apache.hadoop.hbase.ServerName serverName,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.265">sendTransitionReport</a>(org.apache.hadoop.hbase.ServerName serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo regionInfo,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode state,
long 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.273">doCrash</a>(org.apache.hadoop.hbase.ServerName serverName)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.276">doCrash</a>(org.apache.hadoop.hbase.ServerName 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.277">doRestart</a>(org.apache.hadoop.hbase.ServerName serverName)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.291">doRestart</a>(org.apache.hadoop.hbase.ServerName 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestAssignmentManagerBase.html#line.583">collectAssignmentManagerMetrics</a>()</pre>
+<pre>protected void <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: </li>
<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">Nested</a> | </li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">Field</a> | </li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </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 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 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 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 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: </li>
<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">Nested</a> | </li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">Field</a> | </li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </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 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 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 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 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><E> (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><T>, 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><E> (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><T>, 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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 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 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 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 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><<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>> 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><<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>> 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> encodedRegionName,
long barrier,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> queueStorage)</code> </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> 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> env,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)</code> </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> 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> env,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> lastSeqIds)</code> </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> 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> env,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)</code> </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><<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>> 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><<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>> 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> encodedRegionName,
long barrier,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> queueStorage)</code> </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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><E> (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><T>, 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><T>)</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><T>)</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><T>)</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<TState><a name="line.32"></a>
-<span class="sourceLineNo">033</span> extends AbstractPeerNoLockProcedure<TState> 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<TState> extends AbstractPeerNoLockProcedure<TState><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 -> 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 -> 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<String, Long> 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 >= 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() >= 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<String, Long> lastSeqIds = new HashMap<String, Long>();<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->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<String, Long> 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<String, Long> 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><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState></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> </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> </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> </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 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><<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>> 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> encodedRegionName,
- long barrier,
- <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> queueStorage)</code> </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> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState 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> </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> </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 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 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> tsm,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tn)</code> </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> tsm,
- <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tn)</code> </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> 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> 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> env)</code> </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> env)</code> </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> env,
- <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)</code> </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> env,
- <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> lastSeqIds)</code> </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> env)</code> </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> env)</code> </td>
</tr>
@@ -375,7 +344,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Methods inherited from 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></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 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 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 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 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.63">ModifyPeerProcedure</a>()</pre>
+<pre>protected <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 <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> peerId)</pre>
+<pre>protected <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> 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 void <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> env)
+<pre>protected abstract void <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> 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 void <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> env)
+<pre>protected abstract void <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> 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 void <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> env)
+<pre>protected abstract void <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> 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 void <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> env)</pre>
+<pre>protected void <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> 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 org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.102">nextStateAfterRefresh</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <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 boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.110">enablePeerBeforeFinish</a>()</pre>
+<pre>protected boolean <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 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.114">getOldPeerConfig</a>()</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <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 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.118">getNewPeerConfig</a>()</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <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 void <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> env)
+<pre>protected void <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> 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 boolean <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> tsm,
+<pre>private boolean <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> tsm,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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 void <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> env)
+<pre>protected void <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> 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 void <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><<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>> 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> encodedRegionName,
- long barrier,
- <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> 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 void <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> env,
- <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> 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 boolean <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> tsm,
- <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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 void <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> env,
- <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> 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 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <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> env,
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <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> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState 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 org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.341">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.260">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 int <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 state)</pre>
+<pre>protected int <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 state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.351">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <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: <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 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 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 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 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> </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> </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> </td>
</tr>
@@ -206,7 +210,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Fields inherited from 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></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 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 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 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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.61">TransitPeerSyncReplicationStateProcedure</a>()</pre>
+<pre>public <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 <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> peerId,
+<pre>public <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> peerId,
<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a> 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 <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.70">getPeerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <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 void <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> serializer)
+<pre>protected void <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> 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: <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 void <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> serializer)
+<pre>protected void <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> 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: <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 org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.98">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.100">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 int <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 state)</pre>
+<pre>protected int <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 state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.108">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <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: <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 void <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> env)
+<pre>protected void <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> 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 void <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> env)
+<pre>private void <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> 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 void <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> env)</pre>
+<pre>protected void <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> 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 void <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> env)
+<pre>protected void <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> 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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.166">setNextStateAfterRefreshBegin</a>()</pre>
+<pre>private void <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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.181">setNextStateAfterRefreshEnd</a>()</pre>
+<pre>private void <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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.192">replayRemoteWAL</a>(boolean serial)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.204">replayRemoteWAL</a>(boolean 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 void <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> env)
+<pre>protected void <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> 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 void <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> env)
+<pre>protected void <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> 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 void <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> env)
+<pre>protected void <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <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> env,
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <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> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState 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: <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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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<PeerModificationState> {<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> * <p><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> * <p><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<PeerModificationState> {<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> * <p><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> * <p><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 && oldPeerConfig.isSerial() &&<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 && oldPeerConfig.isSerial() &&<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<String, Long> 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 >= 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() >= 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<String, Long> lastSeqIds = new HashMap<String, Long>();<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->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<String, Long> 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<String, Long> 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><TState>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.48">AbstractPeerProcedure</a><TState>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a><TState>
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> </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> </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> </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> </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><<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>> 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> encodedRegionName,
+ long barrier,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> queueStorage)</code> </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> env)</code> </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> </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> 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> tsm,
+ <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tn)</code> </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> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> type)</code> </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> 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> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> peerConfig)</code> </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> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> lastSeqIds)</code> </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 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 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 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 <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 <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 <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.38">AbstractPeerProcedure</a>()</pre>
+<pre>protected <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 <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> peerId)</pre>
+<pre>protected <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> 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 <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.46">getLatch</a>()</pre>
+<pre>public <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.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 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <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> env)</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <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> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 void <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> env)</pre>
+<pre>protected void <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> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 boolean <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> env)</pre>
+<pre>protected boolean <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> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <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 void <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> env,
+<pre>protected final void <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> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> 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 void <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> env)
+<pre>protected void <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> 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 void <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><<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>> 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> encodedRegionName,
+ long barrier,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> 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 void <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> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> 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 boolean <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> tsm,
+ <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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 void <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> env,
+ <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> 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><<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>> 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 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 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 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 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 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 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 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 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 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 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 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 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<HRegion> regions = new ArrayList<>();<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<HRegion> regions = new ArrayList<>();<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<byte[], List<HStoreFile>> 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<HStoreFile> 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() > 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 < 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 > 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<byte[], List<HStoreFile>> 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<HStoreFile> 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() > 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 < 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() > 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 > 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() > storeSize);<a name="line.401"></a>
-<span class="sourceLineNo">402</span> assertTrue(store.getStoreSizeUncompressed() > 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 > 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() > 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 > 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() > storeSize);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> assertTrue(store.getStoreSizeUncompressed() > 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 > 0);<a name="line.476"></a>
-<span class="sourceLineNo">477</span> assertTrue(mss.getHeapSize() > 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 > 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() > 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() > 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() > 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 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 </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> </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 </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> </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> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>class </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> </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> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>class </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> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>class </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 </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> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>class </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> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>class </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> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>class </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> </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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All 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 Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All 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 © 2007–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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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 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 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><E> (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><T>, 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><E> (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><T>, 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < 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 – 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="" /> Warnings</th>
<th><img src="images/icon_error_sml.gif" alt="" /> 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> </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> </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> </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> </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> </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> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#setUp--">setUp</a></span>()</code> </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> </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> </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> </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> </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> </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> </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 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> </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> </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> </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> </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> </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> </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> </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 <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 <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 org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.118">LOG</a></pre>
+<pre>private static final 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 org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.119">name</a></pre>
+<pre>public 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 <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 <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 org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.123">CONF</a></pre>
+<pre>public static 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 <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 <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 byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.126">families</a></pre>
+<pre>private 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 byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.130">tableName</a></pre>
+<pre>protected 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 <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 <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 byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.132">row</a></pre>
+<pre>protected final 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 byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.133">row2</a></pre>
+<pre>protected final 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 byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.134">cq</a></pre>
+<pre>protected 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 org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.137">rootDir</a></pre>
+<pre>private 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 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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.139">time</a></pre>
+<pre>private 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 org.apache.hadoop.hbase.regionserver.RegionServerServices <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.140">rss</a></pre>
+<pre>private 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 org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.141">primaryHri</a></pre>
+<pre>private 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 org.apache.hadoop.hbase.client.RegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.141">secondaryHri</a></pre>
+<pre>private 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 org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.142">primaryRegion</a></pre>
+<pre>private 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 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 org.apache.hadoop.hbase.wal.WALFactory <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.143">wals</a></pre>
+<pre>private 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 <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.112">TestHRegionReplayEvents</a>()</pre>
+<pre>public <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 void <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 void <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 void <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 void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.197">tearDown</a>()
+<pre>public void <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> <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> <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.230">testRegionReplicaSecondaryCannotFlush</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.257">testOnlyReplayingFlushStartDoesNotHoldUpRegionClose</a>()
+<pre>public void <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.296">replayEdit</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
+<pre>static int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.306">replayEdit</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
org.apache.hadoop.hbase.wal.WAL.Entry 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 <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.309">createWALReaderForPrimary</a>()
+<pre>org.apache.hadoop.hbase.wal.WAL.Reader <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.316">testBatchReplayWithMultipleNonces</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.337">testReplayFlushesAndCompactions</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.443">testReplayFlushStartMarkers</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.548">testReplayFlushCommitMarkerSmallerThanFlushStartMarker</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.639">testReplayFlushCommitMarkerLargerThanFlushStartMarker</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.731">testReplayFlushCommitMarkerWithoutFlushStartMarkerDroppableMemstore</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.742">testReplayFlushCommitMarkerWithoutFlushStartMarkerNonDroppableMemstore</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.750">testReplayFlushCommitMarkerWithoutFlushStartMarker</a>(boolean droppableMemstore)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.760">testReplayFlushCommitMarkerWithoutFlushStartMarker</a>(boolean 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 org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.836">clone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor flush,
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.846">clone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor flush,
long 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.846">testReplayRegionOpenEvent</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.926">testReplayRegionOpenEventAfterFlushStart</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1005">testSkippingEditsWithSmallerSeqIdAfterRegionOpenEvent</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1063">testReplayFlushSeqIds</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1107">testSeqIdsFromReplay</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1149">testSecondaryRegionDoesNotWriteRegionEventsToWAL</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1183">testRegionReadsEnabledFlag</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1211">testWriteFlushRequestMarker</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1249">testReplayingFlushRequestRestoresReadsEnabledState</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1278">testReplayingFlushRestoresReadsEnabledState</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1320">testReplayingFlushWithEmptyMemstoreRestoresReadsEnabledState</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1352">testReplayingRegionOpenEventRestoresReadsEnabledState</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1379">testRefresStoreFiles</a>()
+<pre>public void <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 void <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><<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>> list1,
+<pre>private void <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><<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>> 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><<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>> 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1481">disableReads</a>(org.apache.hadoop.hbase.regionserver.HRegion region)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1491">disableReads</a>(org.apache.hadoop.hbase.regionserver.HRegion 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1491">replay</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1501">replay</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
org.apache.hadoop.hbase.client.Put put,
long 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1501">testReplayBulkLoadEvent</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1566">testReplayingFlushCommitWithFileAlreadyDeleted</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1586">testReplayingCompactionWithFileAlreadyDeleted</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1604">testReplayingRegionOpenEventWithFileAlreadyDeleted</a>()
+<pre>public void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1625">testReplayingBulkLoadEventWithFileAlreadyDeleted</a>()
+<pre>public void <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 <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.1641">createHFileForFamilies</a>(org.apache.hadoop.fs.Path testPath,
+<pre>private <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.1651">createHFileForFamilies</a>(org.apache.hadoop.fs.Path testPath,
byte[] family,
byte[] 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1667">putDataWithFlushes</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1677">putDataWithFlushes</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
int flushInterval,
int numRows,
int 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1680">putDataByReplay</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1690">putDataByReplay</a>(org.apache.hadoop.hbase.regionserver.HRegion region,
int startRow,
int numRows,
byte[] 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 org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1692">initHRegion</a>(byte[] tableName,
+<pre>private static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1702">initHRegion</a>(byte[] 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> callingMethod,
byte[]... 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 org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1698">initHRegion</a>(byte[] tableName,
+<pre>private static org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#line.1708">initHRegion</a>(byte[] tableName,
byte[] startKey,
byte[] 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> 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><E> (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><T>, 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<PeerSyncReplicationStateTransitionState> {<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) && 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 -> 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 -> 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 && 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) && serial) && 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 -> 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 -> 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 – 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 –
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 – 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 – 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 – 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 – 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 – 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 –
Apache HBase (TM) Metrics
@@ -469,7 +469,7 @@ export HBASE_REGIONSERVER_OPTS="$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 –
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 – 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 – 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 – 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 – 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 – 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 – 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 –
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 –
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 – 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 – 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 – 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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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<ServerName, SortedSet<byte[]>> regionsToRegionServers =<a name="line.103"></a>
+<span class="sourceLineNo">104</span> new ConcurrentSkipListMap<ServerName, SortedSet<byte[]>>();<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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 < 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() > 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() > 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<byte[]> submitProcedure(final Procedure<MasterProcedureEnv> 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<byte[]> 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<?> 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 < 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 < 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 >= 0 && 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 < 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<byte[]> 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<byte[]>(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 >= 0 && 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<byte[]> 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<byte[]>(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++ < 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++ < 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++ > 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++ > 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++ < 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++ < maxServerRetries) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> LOG.info("Mark server=" + server + " as dead. serverRetries=" + serverRetries
<TRUNCATED>