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

[01/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site a4ed4d2c4 -> 18058c939


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
new file mode 100644
index 0000000..852b0a1
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.replication;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RecoverStandbyState.DISPATCH_WALS_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RecoverStandbyState.UNREGISTER_PEER_FROM_WORKER_STORAGE_VALUE;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertEquals;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HConstants;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.HMaster;<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.procedure2.ProcedureExecutor;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.SyncReplicationTestBase;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.zookeeper.KeeperException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<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> * Testcase for HBASE-21494.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TestRegisterPeerWorkerWhenRestarting extends SyncReplicationTestBase {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    HBaseClassTestRule.forClass(TestRegisterPeerWorkerWhenRestarting.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static volatile boolean FAIL = false;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static final class HMasterForTest extends HMaster {<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      super(conf);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>    @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    public void remoteProcedureCompleted(long procId) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      if (FAIL &amp;&amp; getMasterProcedureExecutor()<a name="line.63"></a>
+<span class="sourceLineNo">064</span>        .getProcedure(procId) instanceof SyncReplicationReplayWALRemoteProcedure) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        throw new RuntimeException("Inject error");<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      }<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      super.remoteProcedureCompleted(procId);<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>  @BeforeClass<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public static void setUp() throws Exception {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    UTIL2.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    SyncReplicationTestBase.setUp();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Test<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void testRestart() throws Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      SyncReplicationState.STANDBY);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      SyncReplicationState.ACTIVE);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    UTIL1.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    write(UTIL1, 0, 100);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Thread.sleep(2000);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // peer is disabled so no data have been replicated<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    verifyNotReplicatedThroughRegion(UTIL2, 0, 100);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>    // transit the A to DA first to avoid too many error logs.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    HMaster master = UTIL2.getHBaseCluster().getMaster();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    // make sure the transiting can not succeed<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    FAIL = true;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    Thread t = new Thread() {<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>      public void run() {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        try {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.102"></a>
+<span class="sourceLineNo">103</span>            SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        } catch (IOException e) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>          throw new UncheckedIOException(e);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    };<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    t.start();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // wait until we are in the states where we need to register peer worker when restarting<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    UTIL2.waitFor(60000,<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      () -&gt; procExec.getProcedures().stream().filter(p -&gt; p instanceof RecoverStandbyProcedure)<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        .map(p -&gt; (RecoverStandbyProcedure) p)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        .anyMatch(p -&gt; p.getCurrentStateId() == DISPATCH_WALS_VALUE ||<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          p.getCurrentStateId() == UNREGISTER_PEER_FROM_WORKER_STORAGE_VALUE));<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    // failover to another master<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    MasterThread mt = UTIL2.getMiniHBaseCluster().getMasterThread();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    mt.getMaster().abort("for testing");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    mt.join();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    FAIL = false;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    t.join();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // make sure the new master can finish the transiting<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    assertEquals(SyncReplicationState.DOWNGRADE_ACTIVE,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      UTIL2.getAdmin().getReplicationPeerSyncReplicationState(PEER_ID));<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    verify(UTIL2, 0, 100);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>}<a name="line.127"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
index 3f26e9b..b7ac0e6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
@@ -25,81 +25,86 @@
 <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 java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.UncheckedIOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureTestingUtility;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.replication.SyncReplicationTestBase;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.junit.BeforeClass;<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>@Category({ MasterTests.class, LargeTests.class })<a name="line.39"></a>
-<span class="sourceLineNo">040</span>public class TestTransitPeerSyncReplicationStateProcedureRetry extends SyncReplicationTestBase {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  @ClassRule<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    HBaseClassTestRule.forClass(TestTransitPeerSyncReplicationStateProcedureRetry.class);<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  @BeforeClass<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static void setUp() throws Exception {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    UTIL2.getConfiguration().setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    SyncReplicationTestBase.setUp();<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  }<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  @Test<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.54"></a>
-<span class="sourceLineNo">055</span>      SyncReplicationState.STANDBY);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      SyncReplicationState.ACTIVE);<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>    UTIL1.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    write(UTIL1, 0, 100);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    Thread.sleep(2000);<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    // peer is disabled so no data have been replicated<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    verifyNotReplicatedThroughRegion(UTIL2, 0, 100);<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    // transit the A to DA first to avoid too many error logs.<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    HMaster master = UTIL2.getHBaseCluster().getMaster();<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    // Enable test flags and then queue the procedure.<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    Thread t = new Thread() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>      @Override<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      public void run() {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>        try {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>          UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>            SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        } catch (IOException e) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>          throw new UncheckedIOException(e);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      }<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    };<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    t.start();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    UTIL2.waitFor(30000, () -&gt; procExec.getProcedures().stream()<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      .anyMatch(p -&gt; p instanceof TransitPeerSyncReplicationStateProcedure &amp;&amp; !p.isFinished()));<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    long procId = procExec.getProcedures().stream()<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      .filter(p -&gt; p instanceof TransitPeerSyncReplicationStateProcedure &amp;&amp; !p.isFinished())<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      .mapToLong(Procedure::getProcId).min().getAsLong();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<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">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.UncheckedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<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.MasterProcedureTestingUtility;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.SyncReplicationTestBase;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.BeforeClass;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.ClassRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Test;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.experimental.categories.Category;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class TestTransitPeerSyncReplicationStateProcedureRetry extends SyncReplicationTestBase {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  @ClassRule<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    HBaseClassTestRule.forClass(TestTransitPeerSyncReplicationStateProcedureRetry.class);<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @BeforeClass<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public static void setUp() throws Exception {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    UTIL2.getConfiguration().setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    SyncReplicationTestBase.setUp();<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  }<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @Test<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      SyncReplicationState.STANDBY);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      SyncReplicationState.ACTIVE);<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>    UTIL1.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    write(UTIL1, 0, 100);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    Thread.sleep(2000);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    // peer is disabled so no data have been replicated<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    verifyNotReplicatedThroughRegion(UTIL2, 0, 100);<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    // transit the A to DA first to avoid too many error logs.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    HMaster master = UTIL2.getHBaseCluster().getMaster();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    // Enable test flags and then queue the procedure.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    Thread t = new Thread() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>      @Override<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      public void run() {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        try {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>          UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>            SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        } catch (IOException e) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>          throw new UncheckedIOException(e);<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>    };<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    t.start();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    UTIL2.waitFor(30000, () -&gt; procExec.getProcedures().stream()<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      .anyMatch(p -&gt; p instanceof TransitPeerSyncReplicationStateProcedure &amp;&amp; !p.isFinished()));<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    long procId = procExec.getProcedures().stream()<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      .filter(p -&gt; p instanceof TransitPeerSyncReplicationStateProcedure &amp;&amp; !p.isFinished())<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      .mapToLong(Procedure::getProcId).min().getAsLong();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    assertEquals(SyncReplicationState.DOWNGRADE_ACTIVE,<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      UTIL2.getAdmin().getReplicationPeerSyncReplicationState(PEER_ID));<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    verify(UTIL2, 0, 100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>}<a name="line.99"></a>
 
 
 


[06/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index c4c914c..1c0118e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -786,3190 +786,3192 @@
 <span class="sourceLineNo">778</span>    this.splitOrMergeTracker.start();<a name="line.778"></a>
 <span class="sourceLineNo">779</span><a name="line.779"></a>
 <span class="sourceLineNo">780</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    this.drainingServerTracker.start();<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      // we need to take care of the ZK information synchronization<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      // if given client ZK are not observer nodes<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          false, true);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      this.metaLocationSyncer.start();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      this.masterAddressSyncer.start();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      // set cluster id is a one-go effort<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // going ahead with their startup.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        ", sessionid=0x" +<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    this.snapshotManager = new SnapshotManager();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    this.mpmHost.register(this.snapshotManager);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    this.mpmHost.loadProcedures(conf);<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      MoveRegionProcedure.class);<a name="line.824"></a>
-<span class="sourceLineNo">825</span><a name="line.825"></a>
-<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   */<a name="line.831"></a>
-<span class="sourceLineNo">832</span>  private void checkUnsupportedProcedure(<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      throws HBaseIOException {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // upgrading.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      if (procs != null) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        LOG.error(<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          clazz, procs);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    // it.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        " finish them, and then try to upgrade again.");<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @VisibleForTesting<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return new AssignmentManager(master);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * &lt;p/&gt;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * what you are doing.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;ol&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * descriptors, etc&lt;/li&gt;<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * region server tracker<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * &lt;ol type='i'&gt;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * server&lt;/li&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * from meta region&lt;/li&gt;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * &lt;/ol&gt;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * &lt;/li&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * &lt;/ol&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * &lt;p/&gt;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.904"></a>
-<span class="sourceLineNo">905</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    zombieDetector.setDaemon(true);<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    zombieDetector.start();<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>    /*<a name="line.911"></a>
-<span class="sourceLineNo">912</span>     * We are active master now... go initialize components we need to run.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>     */<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    status.setStatus("Initializing Master file system");<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
-<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    this.drainingServerTracker.start();<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.786"></a>
+<span class="sourceLineNo">787</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>      // we need to take care of the ZK information synchronization<a name="line.789"></a>
+<span class="sourceLineNo">790</span>      // if given client ZK are not observer nodes<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.791"></a>
+<span class="sourceLineNo">792</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          false, true);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      this.metaLocationSyncer.start();<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      this.masterAddressSyncer.start();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      // set cluster id is a one-go effort<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    // going ahead with their startup.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        ", sessionid=0x" +<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.809"></a>
+<span class="sourceLineNo">810</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    this.snapshotManager = new SnapshotManager();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    this.mpmHost.register(this.snapshotManager);<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    this.mpmHost.loadProcedures(conf);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      MoveRegionProcedure.class);<a name="line.823"></a>
+<span class="sourceLineNo">824</span><a name="line.824"></a>
+<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
+<span class="sourceLineNo">831</span>  private void checkUnsupportedProcedure(<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      throws HBaseIOException {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    // upgrading.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>      if (procs != null) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        LOG.error(<a name="line.841"></a>
+<span class="sourceLineNo">842</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.843"></a>
+<span class="sourceLineNo">844</span>          clazz, procs);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      }<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.849"></a>
+<span class="sourceLineNo">850</span>    // it.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        " finish them, and then try to upgrade again.");<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @VisibleForTesting<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return new AssignmentManager(master);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * &lt;p/&gt;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * what you are doing.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;ol&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * descriptors, etc&lt;/li&gt;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * region server tracker<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * &lt;ol type='i'&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * server&lt;/li&gt;<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * from meta region&lt;/li&gt;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   * &lt;/ol&gt;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * &lt;/li&gt;<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   * &lt;/ol&gt;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * &lt;p/&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   */<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.903"></a>
+<span class="sourceLineNo">904</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    zombieDetector.setDaemon(true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    zombieDetector.start();<a name="line.908"></a>
+<span class="sourceLineNo">909</span><a name="line.909"></a>
+<span class="sourceLineNo">910</span>    /*<a name="line.910"></a>
+<span class="sourceLineNo">911</span>     * We are active master now... go initialize components we need to run.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>     */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    status.setStatus("Initializing Master file system");<a name="line.913"></a>
+<span class="sourceLineNo">914</span><a name="line.914"></a>
+<span class="sourceLineNo">915</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      initializeMemStoreChunkCreator();<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.walManager = new MasterWalManager(this);<a name="line.923"></a>
+<span class="sourceLineNo">924</span><a name="line.924"></a>
+<span class="sourceLineNo">925</span>    // enable table descriptors cache<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    this.tableDescriptors.setCacheOn();<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>    // warm-up HTDs cache on master initialization<a name="line.928"></a>
+<span class="sourceLineNo">929</span>    if (preLoadTableDescriptors) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      status.setStatus("Pre-loading table descriptors");<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      this.tableDescriptors.getAll();<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    }<a name="line.932"></a>
+<span class="sourceLineNo">933</span><a name="line.933"></a>
+<span class="sourceLineNo">934</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    this.clusterId = clusterId.toString();<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbase.write.hbck1.lock.file to false.<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.946"></a>
+<span class="sourceLineNo">947</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    // loading.<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    this.serverManager = createServerManager(this);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    createProcedureExecutor();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    @SuppressWarnings("rawtypes")<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.958"></a>
+<span class="sourceLineNo">959</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
-<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span><a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span><a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span><a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span><a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    this.assignmentManager.processOfflineRegions();<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Initialize after meta is up as below scans meta<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      snapshotOfRegionAssignment.initialize();<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // set cluster status again after user regions are assigned<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    this.balancerChore = new BalancerChore(this);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    this.serverManager.startChore();<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    // NAMESPACE READ!!!!<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!waitForNamespaceOnline()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      return;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    status.setStatus("Starting cluster schema service");<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    initClusterSchemaService();<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (this.cpHost != null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      try {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        this.cpHost.preMasterInitialization();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      } catch (IOException e) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    status.markComplete("Initialization successful");<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    configurationManager.registerObserver(this.balancer);<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    // Set master as 'initialized'.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    setInitialized(true);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    if (maintenanceMode) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      return;<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    status.setStatus("Assign meta replicas");<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    metaBootstrap.assignMetaReplicas();<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    status.setStatus("Starting quota manager");<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    initQuotaManager();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // Create the quota snapshot notifier<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span><a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    // master initialization. See HBASE-5916.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span><a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    initMobCleaner();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    if (this.cpHost != null) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      // don't let cp initialization errors kill the master<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      try {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>        this.cpHost.postStartMaster();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      } catch (IOException ioe) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    zombieDetector.interrupt();<a name="line.1187"></a>
+<span class="sourceLineNo">961</span>    checkUnsupportedProcedure(procsByType);<a name="line.961"></a>
+<span class="sourceLineNo">962</span><a name="line.962"></a>
+<span class="sourceLineNo">963</span>    // Create Assignment Manager<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    this.assignmentManager.start();<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.970"></a>
+<span class="sourceLineNo">971</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.971"></a>
+<span class="sourceLineNo">972</span>        .collect(Collectors.toList());<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    this.assignmentManager.setupRIT(ritList);<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    this.regionServerTracker.start(<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    this.tableStateManager =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        ?<a name="line.990"></a>
+<span class="sourceLineNo">991</span>        new MirroringTableStateManager(this):<a name="line.991"></a>
+<span class="sourceLineNo">992</span>        new TableStateManager(this);<a name="line.992"></a>
+<span class="sourceLineNo">993</span><a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Initializing ZK system trackers");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    initializeZKBasedSystemTrackers();<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    try {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    } catch (IOException e) {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          + " from file system", e);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    this.activeMaster = true;<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span><a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    // This is for backwards compatibility<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    // See HBASE-11393<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    tableCFsUpdater.copyTableCFs();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span><a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    if (!maintenanceMode) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      // initialize master side coprocessors before we start handling requests<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      status.setStatus("Initializing master coprocessors");<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    }<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span><a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    // Checking if meta needs initializing.<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    InitMetaProcedure initMetaProc = null;<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    LOG.info("hbase:meta {}", rs);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (rs.isOffline()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>        procedureExecutor.submitProcedure(temp);<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>        return temp;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      });<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // initialize load balancer<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.setMasterServices(this);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    this.balancer.initialize();<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span><a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    // start up all service threads.<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    status.setStatus("Initializing master service threads");<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    startServiceThreads();<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    // wait meta to be initialized after we start procedure executor<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    if (initMetaProc != null) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      initMetaProc.await();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // Wake up this server to check in<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    sleeper.skipSleepCycle();<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span><a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // Wait for region servers to report in.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    String statusStr = "Wait for region servers to report in";<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    status.setStatus(statusStr);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    LOG.info(Objects.toString(status));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    waitForRegionServers(status);<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span><a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (isStopped()) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      return;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    status.setStatus("Starting assignment manager");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // FIRST HBASE:META READ!!!!<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    // available. That's what waitForMetaOnline does.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    if (!waitForMetaOnline()) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      return;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.assignmentManager.joinCluster();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // The below depends on hbase:meta being online.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    this.tableStateManager.start();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    this.assignmentManager.processOfflineRegions();<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    // Initialize after meta is up as below scans meta<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      snapshotOfRegionAssignment.initialize();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span><a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    // set cluster status again after user regions are assigned<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    this.balancerChore = new BalancerChore(this);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    this.serverManager.startChore();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    // NAMESPACE READ!!!!<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    if (!waitForNamespaceOnline()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      return;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    status.setStatus("Starting cluster schema service");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    initClusterSchemaService();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    if (this.cpHost != null) {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      try {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>        this.cpHost.preMasterInitialization();<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      } catch (IOException e) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      }<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    status.markComplete("Initialization successful");<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.balancer);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    // Set master as 'initialized'.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    setInitialized(true);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (maintenanceMode) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>      return;<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span><a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    status.setStatus("Assign meta replicas");<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    metaBootstrap.assignMetaReplicas();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    status.setStatus("Starting quota manager");<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    initQuotaManager();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Create the quota snapshot notifier<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>  

<TRUNCATED>

[04/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
index c4c914c..1c0118e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -786,3190 +786,3192 @@
 <span class="sourceLineNo">778</span>    this.splitOrMergeTracker.start();<a name="line.778"></a>
 <span class="sourceLineNo">779</span><a name="line.779"></a>
 <span class="sourceLineNo">780</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    this.drainingServerTracker.start();<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      // we need to take care of the ZK information synchronization<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      // if given client ZK are not observer nodes<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          false, true);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      this.metaLocationSyncer.start();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      this.masterAddressSyncer.start();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      // set cluster id is a one-go effort<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // going ahead with their startup.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        ", sessionid=0x" +<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    this.snapshotManager = new SnapshotManager();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    this.mpmHost.register(this.snapshotManager);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    this.mpmHost.loadProcedures(conf);<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      MoveRegionProcedure.class);<a name="line.824"></a>
-<span class="sourceLineNo">825</span><a name="line.825"></a>
-<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   */<a name="line.831"></a>
-<span class="sourceLineNo">832</span>  private void checkUnsupportedProcedure(<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      throws HBaseIOException {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // upgrading.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      if (procs != null) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        LOG.error(<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          clazz, procs);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    // it.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        " finish them, and then try to upgrade again.");<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @VisibleForTesting<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return new AssignmentManager(master);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * &lt;p/&gt;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * what you are doing.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;ol&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * descriptors, etc&lt;/li&gt;<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * region server tracker<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * &lt;ol type='i'&gt;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * server&lt;/li&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * from meta region&lt;/li&gt;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * &lt;/ol&gt;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * &lt;/li&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * &lt;/ol&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * &lt;p/&gt;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.904"></a>
-<span class="sourceLineNo">905</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    zombieDetector.setDaemon(true);<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    zombieDetector.start();<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>    /*<a name="line.911"></a>
-<span class="sourceLineNo">912</span>     * We are active master now... go initialize components we need to run.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>     */<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    status.setStatus("Initializing Master file system");<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
-<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    this.drainingServerTracker.start();<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.786"></a>
+<span class="sourceLineNo">787</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>      // we need to take care of the ZK information synchronization<a name="line.789"></a>
+<span class="sourceLineNo">790</span>      // if given client ZK are not observer nodes<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.791"></a>
+<span class="sourceLineNo">792</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          false, true);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      this.metaLocationSyncer.start();<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      this.masterAddressSyncer.start();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      // set cluster id is a one-go effort<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    // going ahead with their startup.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        ", sessionid=0x" +<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.809"></a>
+<span class="sourceLineNo">810</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    this.snapshotManager = new SnapshotManager();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    this.mpmHost.register(this.snapshotManager);<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    this.mpmHost.loadProcedures(conf);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      MoveRegionProcedure.class);<a name="line.823"></a>
+<span class="sourceLineNo">824</span><a name="line.824"></a>
+<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
+<span class="sourceLineNo">831</span>  private void checkUnsupportedProcedure(<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      throws HBaseIOException {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    // upgrading.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>      if (procs != null) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        LOG.error(<a name="line.841"></a>
+<span class="sourceLineNo">842</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.843"></a>
+<span class="sourceLineNo">844</span>          clazz, procs);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      }<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.849"></a>
+<span class="sourceLineNo">850</span>    // it.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        " finish them, and then try to upgrade again.");<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @VisibleForTesting<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return new AssignmentManager(master);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * &lt;p/&gt;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * what you are doing.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;ol&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * descriptors, etc&lt;/li&gt;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * region server tracker<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * &lt;ol type='i'&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * server&lt;/li&gt;<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * from meta region&lt;/li&gt;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   * &lt;/ol&gt;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * &lt;/li&gt;<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   * &lt;/ol&gt;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * &lt;p/&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   */<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.903"></a>
+<span class="sourceLineNo">904</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    zombieDetector.setDaemon(true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    zombieDetector.start();<a name="line.908"></a>
+<span class="sourceLineNo">909</span><a name="line.909"></a>
+<span class="sourceLineNo">910</span>    /*<a name="line.910"></a>
+<span class="sourceLineNo">911</span>     * We are active master now... go initialize components we need to run.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>     */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    status.setStatus("Initializing Master file system");<a name="line.913"></a>
+<span class="sourceLineNo">914</span><a name="line.914"></a>
+<span class="sourceLineNo">915</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      initializeMemStoreChunkCreator();<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.walManager = new MasterWalManager(this);<a name="line.923"></a>
+<span class="sourceLineNo">924</span><a name="line.924"></a>
+<span class="sourceLineNo">925</span>    // enable table descriptors cache<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    this.tableDescriptors.setCacheOn();<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>    // warm-up HTDs cache on master initialization<a name="line.928"></a>
+<span class="sourceLineNo">929</span>    if (preLoadTableDescriptors) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      status.setStatus("Pre-loading table descriptors");<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      this.tableDescriptors.getAll();<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    }<a name="line.932"></a>
+<span class="sourceLineNo">933</span><a name="line.933"></a>
+<span class="sourceLineNo">934</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    this.clusterId = clusterId.toString();<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbase.write.hbck1.lock.file to false.<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.946"></a>
+<span class="sourceLineNo">947</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    // loading.<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    this.serverManager = createServerManager(this);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    createProcedureExecutor();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    @SuppressWarnings("rawtypes")<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.958"></a>
+<span class="sourceLineNo">959</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
-<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span><a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span><a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span><a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span><a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    this.assignmentManager.processOfflineRegions();<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Initialize after meta is up as below scans meta<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      snapshotOfRegionAssignment.initialize();<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // set cluster status again after user regions are assigned<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    this.balancerChore = new BalancerChore(this);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    this.serverManager.startChore();<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    // NAMESPACE READ!!!!<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!waitForNamespaceOnline()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      return;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    status.setStatus("Starting cluster schema service");<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    initClusterSchemaService();<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (this.cpHost != null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      try {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        this.cpHost.preMasterInitialization();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      } catch (IOException e) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    status.markComplete("Initialization successful");<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    configurationManager.registerObserver(this.balancer);<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    // Set master as 'initialized'.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    setInitialized(true);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    if (maintenanceMode) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      return;<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    status.setStatus("Assign meta replicas");<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    metaBootstrap.assignMetaReplicas();<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    status.setStatus("Starting quota manager");<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    initQuotaManager();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // Create the quota snapshot notifier<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span><a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    // master initialization. See HBASE-5916.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span><a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    initMobCleaner();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    if (this.cpHost != null) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      // don't let cp initialization errors kill the master<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      try {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>        this.cpHost.postStartMaster();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      } catch (IOException ioe) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    zombieDetector.interrupt();<a name="line.1187"></a>
+<span class="sourceLineNo">961</span>    checkUnsupportedProcedure(procsByType);<a name="line.961"></a>
+<span class="sourceLineNo">962</span><a name="line.962"></a>
+<span class="sourceLineNo">963</span>    // Create Assignment Manager<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    this.assignmentManager.start();<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.970"></a>
+<span class="sourceLineNo">971</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.971"></a>
+<span class="sourceLineNo">972</span>        .collect(Collectors.toList());<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    this.assignmentManager.setupRIT(ritList);<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    this.regionServerTracker.start(<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    this.tableStateManager =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        ?<a name="line.990"></a>
+<span class="sourceLineNo">991</span>        new MirroringTableStateManager(this):<a name="line.991"></a>
+<span class="sourceLineNo">992</span>        new TableStateManager(this);<a name="line.992"></a>
+<span class="sourceLineNo">993</span><a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Initializing ZK system trackers");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    initializeZKBasedSystemTrackers();<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    try {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    } catch (IOException e) {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          + " from file system", e);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    this.activeMaster = true;<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span><a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    // This is for backwards compatibility<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    // See HBASE-11393<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    tableCFsUpdater.copyTableCFs();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span><a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    if (!maintenanceMode) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      // initialize master side coprocessors before we start handling requests<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      status.setStatus("Initializing master coprocessors");<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    }<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span><a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    // Checking if meta needs initializing.<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    InitMetaProcedure initMetaProc = null;<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    LOG.info("hbase:meta {}", rs);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (rs.isOffline()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>        procedureExecutor.submitProcedure(temp);<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>        return temp;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      });<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // initialize load balancer<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.setMasterServices(this);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    this.balancer.initialize();<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span><a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    // start up all service threads.<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    status.setStatus("Initializing master service threads");<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    startServiceThreads();<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    // wait meta to be initialized after we start procedure executor<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    if (initMetaProc != null) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      initMetaProc.await();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // Wake up this server to check in<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    sleeper.skipSleepCycle();<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span><a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // Wait for region servers to report in.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    String statusStr = "Wait for region servers to report in";<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    status.setStatus(statusStr);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    LOG.info(Objects.toString(status));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    waitForRegionServers(status);<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span><a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (isStopped()) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      return;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    status.setStatus("Starting assignment manager");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // FIRST HBASE:META READ!!!!<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    // available. That's what waitForMetaOnline does.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    if (!waitForMetaOnline()) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      return;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.assignmentManager.joinCluster();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // The below depends on hbase:meta being online.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    this.tableStateManager.start();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    this.assignmentManager.processOfflineRegions();<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    // Initialize after meta is up as below scans meta<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      snapshotOfRegionAssignment.initialize();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span><a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    // set cluster status again after user regions are assigned<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    this.balancerChore = new BalancerChore(this);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    this.serverManager.startChore();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    // NAMESPACE READ!!!!<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    if (!waitForNamespaceOnline()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      return;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    status.setStatus("Starting cluster schema service");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    initClusterSchemaService();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    if (this.cpHost != null) {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      try {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>        this.cpHost.preMasterInitialization();<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      } catch (IOException e) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      }<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    status.markComplete("Initialization successful");<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.balancer);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    // Set master as 'initialized'.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    setInitialized(true);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (maintenanceMode) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>      return;<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span><a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    status.setStatus("Assign meta replicas");<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    metaBootstrap.assignMetaReplicas();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    status.setStatus("Starting quota manager");<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    initQuotaManager();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Create the quota snapshot notifier<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<

<TRUNCATED>

[07/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index c4c914c..1c0118e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -786,3190 +786,3192 @@
 <span class="sourceLineNo">778</span>    this.splitOrMergeTracker.start();<a name="line.778"></a>
 <span class="sourceLineNo">779</span><a name="line.779"></a>
 <span class="sourceLineNo">780</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    this.drainingServerTracker.start();<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      // we need to take care of the ZK information synchronization<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      // if given client ZK are not observer nodes<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          false, true);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      this.metaLocationSyncer.start();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      this.masterAddressSyncer.start();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      // set cluster id is a one-go effort<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // going ahead with their startup.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        ", sessionid=0x" +<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    this.snapshotManager = new SnapshotManager();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    this.mpmHost.register(this.snapshotManager);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    this.mpmHost.loadProcedures(conf);<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      MoveRegionProcedure.class);<a name="line.824"></a>
-<span class="sourceLineNo">825</span><a name="line.825"></a>
-<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   */<a name="line.831"></a>
-<span class="sourceLineNo">832</span>  private void checkUnsupportedProcedure(<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      throws HBaseIOException {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // upgrading.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      if (procs != null) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        LOG.error(<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          clazz, procs);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    // it.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        " finish them, and then try to upgrade again.");<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @VisibleForTesting<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return new AssignmentManager(master);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * &lt;p/&gt;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * what you are doing.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;ol&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * descriptors, etc&lt;/li&gt;<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * region server tracker<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * &lt;ol type='i'&gt;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * server&lt;/li&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * from meta region&lt;/li&gt;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * &lt;/ol&gt;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * &lt;/li&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * &lt;/ol&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * &lt;p/&gt;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.904"></a>
-<span class="sourceLineNo">905</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    zombieDetector.setDaemon(true);<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    zombieDetector.start();<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>    /*<a name="line.911"></a>
-<span class="sourceLineNo">912</span>     * We are active master now... go initialize components we need to run.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>     */<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    status.setStatus("Initializing Master file system");<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
-<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    this.drainingServerTracker.start();<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.786"></a>
+<span class="sourceLineNo">787</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>      // we need to take care of the ZK information synchronization<a name="line.789"></a>
+<span class="sourceLineNo">790</span>      // if given client ZK are not observer nodes<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.791"></a>
+<span class="sourceLineNo">792</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          false, true);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      this.metaLocationSyncer.start();<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      this.masterAddressSyncer.start();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      // set cluster id is a one-go effort<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    // going ahead with their startup.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        ", sessionid=0x" +<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.809"></a>
+<span class="sourceLineNo">810</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    this.snapshotManager = new SnapshotManager();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    this.mpmHost.register(this.snapshotManager);<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    this.mpmHost.loadProcedures(conf);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      MoveRegionProcedure.class);<a name="line.823"></a>
+<span class="sourceLineNo">824</span><a name="line.824"></a>
+<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
+<span class="sourceLineNo">831</span>  private void checkUnsupportedProcedure(<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      throws HBaseIOException {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    // upgrading.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>      if (procs != null) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        LOG.error(<a name="line.841"></a>
+<span class="sourceLineNo">842</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.843"></a>
+<span class="sourceLineNo">844</span>          clazz, procs);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      }<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.849"></a>
+<span class="sourceLineNo">850</span>    // it.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        " finish them, and then try to upgrade again.");<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @VisibleForTesting<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return new AssignmentManager(master);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * &lt;p/&gt;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * what you are doing.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;ol&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * descriptors, etc&lt;/li&gt;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * region server tracker<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * &lt;ol type='i'&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * server&lt;/li&gt;<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * from meta region&lt;/li&gt;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   * &lt;/ol&gt;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * &lt;/li&gt;<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   * &lt;/ol&gt;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * &lt;p/&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   */<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.903"></a>
+<span class="sourceLineNo">904</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    zombieDetector.setDaemon(true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    zombieDetector.start();<a name="line.908"></a>
+<span class="sourceLineNo">909</span><a name="line.909"></a>
+<span class="sourceLineNo">910</span>    /*<a name="line.910"></a>
+<span class="sourceLineNo">911</span>     * We are active master now... go initialize components we need to run.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>     */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    status.setStatus("Initializing Master file system");<a name="line.913"></a>
+<span class="sourceLineNo">914</span><a name="line.914"></a>
+<span class="sourceLineNo">915</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      initializeMemStoreChunkCreator();<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.walManager = new MasterWalManager(this);<a name="line.923"></a>
+<span class="sourceLineNo">924</span><a name="line.924"></a>
+<span class="sourceLineNo">925</span>    // enable table descriptors cache<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    this.tableDescriptors.setCacheOn();<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>    // warm-up HTDs cache on master initialization<a name="line.928"></a>
+<span class="sourceLineNo">929</span>    if (preLoadTableDescriptors) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      status.setStatus("Pre-loading table descriptors");<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      this.tableDescriptors.getAll();<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    }<a name="line.932"></a>
+<span class="sourceLineNo">933</span><a name="line.933"></a>
+<span class="sourceLineNo">934</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    this.clusterId = clusterId.toString();<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbase.write.hbck1.lock.file to false.<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.946"></a>
+<span class="sourceLineNo">947</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    // loading.<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    this.serverManager = createServerManager(this);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    createProcedureExecutor();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    @SuppressWarnings("rawtypes")<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.958"></a>
+<span class="sourceLineNo">959</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
-<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span><a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span><a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span><a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span><a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    this.assignmentManager.processOfflineRegions();<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Initialize after meta is up as below scans meta<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      snapshotOfRegionAssignment.initialize();<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // set cluster status again after user regions are assigned<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    this.balancerChore = new BalancerChore(this);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    this.serverManager.startChore();<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    // NAMESPACE READ!!!!<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!waitForNamespaceOnline()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      return;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    status.setStatus("Starting cluster schema service");<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    initClusterSchemaService();<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (this.cpHost != null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      try {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        this.cpHost.preMasterInitialization();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      } catch (IOException e) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    status.markComplete("Initialization successful");<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    configurationManager.registerObserver(this.balancer);<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    // Set master as 'initialized'.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    setInitialized(true);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    if (maintenanceMode) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      return;<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    status.setStatus("Assign meta replicas");<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    metaBootstrap.assignMetaReplicas();<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    status.setStatus("Starting quota manager");<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    initQuotaManager();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // Create the quota snapshot notifier<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span><a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    // master initialization. See HBASE-5916.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span><a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    initMobCleaner();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    if (this.cpHost != null) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      // don't let cp initialization errors kill the master<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      try {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>        this.cpHost.postStartMaster();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      } catch (IOException ioe) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    zombieDetector.interrupt();<a name="line.1187"></a>
+<span class="sourceLineNo">961</span>    checkUnsupportedProcedure(procsByType);<a name="line.961"></a>
+<span class="sourceLineNo">962</span><a name="line.962"></a>
+<span class="sourceLineNo">963</span>    // Create Assignment Manager<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    this.assignmentManager.start();<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.970"></a>
+<span class="sourceLineNo">971</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.971"></a>
+<span class="sourceLineNo">972</span>        .collect(Collectors.toList());<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    this.assignmentManager.setupRIT(ritList);<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    this.regionServerTracker.start(<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    this.tableStateManager =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        ?<a name="line.990"></a>
+<span class="sourceLineNo">991</span>        new MirroringTableStateManager(this):<a name="line.991"></a>
+<span class="sourceLineNo">992</span>        new TableStateManager(this);<a name="line.992"></a>
+<span class="sourceLineNo">993</span><a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Initializing ZK system trackers");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    initializeZKBasedSystemTrackers();<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    try {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    } catch (IOException e) {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          + " from file system", e);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    this.activeMaster = true;<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span><a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    // This is for backwards compatibility<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    // See HBASE-11393<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    tableCFsUpdater.copyTableCFs();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span><a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    if (!maintenanceMode) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      // initialize master side coprocessors before we start handling requests<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      status.setStatus("Initializing master coprocessors");<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    }<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span><a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    // Checking if meta needs initializing.<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    InitMetaProcedure initMetaProc = null;<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    LOG.info("hbase:meta {}", rs);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (rs.isOffline()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>        procedureExecutor.submitProcedure(temp);<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>        return temp;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      });<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // initialize load balancer<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.setMasterServices(this);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    this.balancer.initialize();<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span><a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    // start up all service threads.<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    status.setStatus("Initializing master service threads");<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    startServiceThreads();<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    // wait meta to be initialized after we start procedure executor<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    if (initMetaProc != null) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      initMetaProc.await();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // Wake up this server to check in<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    sleeper.skipSleepCycle();<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span><a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // Wait for region servers to report in.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    String statusStr = "Wait for region servers to report in";<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    status.setStatus(statusStr);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    LOG.info(Objects.toString(status));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    waitForRegionServers(status);<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span><a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (isStopped()) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      return;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    status.setStatus("Starting assignment manager");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // FIRST HBASE:META READ!!!!<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    // available. That's what waitForMetaOnline does.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    if (!waitForMetaOnline()) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      return;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.assignmentManager.joinCluster();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // The below depends on hbase:meta being online.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    this.tableStateManager.start();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    this.assignmentManager.processOfflineRegions();<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    // Initialize after meta is up as below scans meta<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      snapshotOfRegionAssignment.initialize();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span><a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    // set cluster status again after user regions are assigned<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    this.balancerChore = new BalancerChore(this);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    this.serverManager.startChore();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    // NAMESPACE READ!!!!<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    if (!waitForNamespaceOnline()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      return;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    status.setStatus("Starting cluster schema service");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    initClusterSchemaService();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    if (this.cpHost != null) {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      try {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>        this.cpHost.preMasterInitialization();<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      } catch (IOException e) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      }<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    status.markComplete("Initialization successful");<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.balancer);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    // Set master as 'initialized'.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    setInitialized(true);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (maintenanceMode) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>      return;<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span><a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    status.setStatus("Assign meta replicas");<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    metaBootstrap.assignMetaReplicas();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    status.setStatus("Starting quota manager");<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    initQuotaManager();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Create the quota snapshot notifier<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1157"></a>
+<span

<TRUNCATED>

[09/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 71daedb..23054ab 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 = "Sun Nov 18 14:42:24 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Mon Nov 19 14:44:53 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 = "4fbe199ed220266679ec9666c302e242";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "354946859721123895ba2f38486ee8a8";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[02/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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
new file mode 100644
index 0000000..db02c54
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html
@@ -0,0 +1,383 @@
+<!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>TestRegisterPeerWorkerWhenRestarting (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="TestRegisterPeerWorkerWhenRestarting (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRegisterPeerWorkerWhenRestarting.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" target="_top">Frames</a></li>
+<li><a href="TestRegisterPeerWorkerWhenRestarting.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.replication</div>
+<h2 title="Class TestRegisterPeerWorkerWhenRestarting" class="title">Class TestRegisterPeerWorkerWhenRestarting</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.master.replication.TestRegisterPeerWorkerWhenRestarting</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/master/replication/TestRegisterPeerWorkerWhenRestarting.html#line.47">TestRegisterPeerWorkerWhenRestarting</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 for HBASE-21494.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#FAIL">FAIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.SyncReplicationTestBase">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#CF">CF</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#CQ">CQ</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#PEER_ID">PEER_ID</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#REMOTE_WAL_DIR1">REMOTE_WAL_DIR1</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#REMOTE_WAL_DIR2">REMOTE_WAL_DIR2</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#TABLE_NAME">TABLE_NAME</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#UTIL1">UTIL1</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#UTIL2">UTIL2</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRe
 plicationTestBase.html#ZK_UTIL">ZK_UTIL</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#TestRegisterPeerWorkerWhenRestarting--">TestRegisterPeerWorkerWhenRestarting</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#setUp--">setUp</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#testRestart--">testRestart</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.SyncReplicationTestBase">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.hbase.master.MasterFileSystem-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getRemoteWALDir-org.apache.hadoop.fs.Path-java.lang.String-">getRemoteWALDir</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#getReplayRemoteWALs-org.apache.hadoop.fs.Path-java.lang.String-">getReplayRemoteWALs</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#initTestingUtility-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-">initTestingUtility</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html#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>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#line.50">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="FAIL">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FAIL</h4>
+<pre>private static volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#line.53">FAIL</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="TestRegisterPeerWorkerWhenRestarting--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestRegisterPeerWorkerWhenRestarting</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#line.47">TestRegisterPeerWorkerWhenRestarting</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#line.72">setUp</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testRestart--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testRestart</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#line.78">testRestart</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/TestRegisterPeerWorkerWhenRestarting.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" target="_top">Frames</a></li>
+<li><a href="TestRegisterPeerWorkerWhenRestarting.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html
index 551def6..a70309b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -365,7 +365,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 8b23b0c..c17526e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.40">TestTransitPeerSyncReplicationStateProcedureRetry</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.42">TestTransitPeerSyncReplicationStateProcedureRetry</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html" title="class in org.apache.hadoop.hbase.replication">SyncReplicationTestBase</a></pre>
 </li>
 </ul>
@@ -220,7 +220,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.43">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.45">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -237,7 +237,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestTransitPeerSyncReplicationStateProcedureRetry</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.40">TestTransitPeerSyncReplicationStateProcedureRetry</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.42">TestTransitPeerSyncReplicationStateProcedureRetry</a>()</pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.47">setUp</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.49">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>
@@ -268,7 +268,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncRepli
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testRecoveryAndDoubleExecution</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.53">testRecoveryAndDoubleExecution</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#line.55">testRecoveryAndDoubleExecution</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/18058c93/testdevapidocs/org/apache/hadoop/hbase/master/replication/class-use/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/class-use/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/class-use/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html
new file mode 100644
index 0000000..bf297a8
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/class-use/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.replication.TestRegisterPeerWorkerWhenRestarting.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.replication.TestRegisterPeerWorkerWhenRestarting.HMasterForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.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/master/replication/class-use/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.master.replication.TestRegisterPeerWorkerWhenRestarting.HMasterForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.replication.TestRegisterPeerWorkerWhenRestarting.HMasterForTest</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.replication.TestRegisterPeerWorkerWhenRestarting.HMasterForTest</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.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/master/replication/class-use/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" target="_top">Frames</a></li>
+<li><a href="TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
index 3578a25..42c92a8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
@@ -15,6 +15,8 @@
 <ul title="Classes">
 <li><a href="TestModifyPeerProcedureRetryBackoff.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestModifyPeerProcedureRetryBackoff</a></li>
 <li><a href="TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure</a></li>
+<li><a href="TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestRegisterPeerWorkerWhenRestarting</a></li>
+<li><a href="TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></li>
 <li><a href="TestSyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestSyncReplicationReplayWALManager</a></li>
 <li><a href="TestTransitPeerSyncReplicationStateProcedureBackoff.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestTransitPeerSyncReplicationStateProcedureBackoff</a></li>
 <li><a href="TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestTransitPeerSyncReplicationStateProcedureBackoff.TestTransitPeerSyncReplicationStateProcedure</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
index eb197ed..7037cce 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
@@ -91,6 +91,16 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting</a></td>
+<td class="colLast">
+<div class="block">Testcase for HBASE-21494.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">TestSyncReplicationReplayWALManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
index 02f6014..28b098e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
@@ -81,6 +81,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
+<li type="circle">org.apache.hadoop.hbase.util.HasThread (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.HRegionServer (implements org.apache.hadoop.hbase.conf.ConfigurationObserver, org.apache.hadoop.hbase.regionserver.LastSequenceId, org.apache.hadoop.hbase.regionserver.RegionServerServices)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.HMaster (implements org.apache.hadoop.hbase.master.MasterServices)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;TEnvironment,TState&gt;
@@ -109,6 +122,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.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.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">TestTransitPeerSyncReplicationStateProcedureRetry</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 573671f..b78d39b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -580,14 +580,14 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 2d8c701..1fc7c25 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -236,8 +236,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 <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/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 cf340b1..8f4988a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/SyncReplicationTestBase.html
@@ -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/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.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.replication">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>
+<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>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 9c8f590..0f39eca 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/SyncReplicationTestBase.html
@@ -112,6 +112,12 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting</a></span></code>
+<div class="block">Testcase for HBASE-21494.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureRetry</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 db9b7a6..a45e794 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/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>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.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/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/18058c93/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 374b18b..b857403 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -1110,6 +1110,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionAssignedToMultipleRegionServers.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionAssignedToMultipleRegionServers.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionMergeTransactionOnCluster.MyMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.NeverInitializedMaster.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReportForDuty.NeverInitializedMaster</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationProcedureRetry.MockHMaster.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationProcedureRetry.MockHMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportOnlineRegionsRace.HMasterForTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestReportRegionStateTransitionRetry.HMasterForTest</span></a></li>
@@ -2336,6 +2337,7 @@
 <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.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/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/18058c93/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html
new file mode 100644
index 0000000..852b0a1
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.replication;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RecoverStandbyState.DISPATCH_WALS_VALUE;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RecoverStandbyState.UNREGISTER_PEER_FROM_WORKER_STORAGE_VALUE;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertEquals;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.io.UncheckedIOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HConstants;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.HMaster;<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.procedure2.ProcedureExecutor;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.SyncReplicationTestBase;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.zookeeper.KeeperException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<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> * Testcase for HBASE-21494.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TestRegisterPeerWorkerWhenRestarting extends SyncReplicationTestBase {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    HBaseClassTestRule.forClass(TestRegisterPeerWorkerWhenRestarting.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static volatile boolean FAIL = false;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static final class HMasterForTest extends HMaster {<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>    public HMasterForTest(Configuration conf) throws IOException, KeeperException {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      super(conf);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>    @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    public void remoteProcedureCompleted(long procId) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      if (FAIL &amp;&amp; getMasterProcedureExecutor()<a name="line.63"></a>
+<span class="sourceLineNo">064</span>        .getProcedure(procId) instanceof SyncReplicationReplayWALRemoteProcedure) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        throw new RuntimeException("Inject error");<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      }<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      super.remoteProcedureCompleted(procId);<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>  @BeforeClass<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public static void setUp() throws Exception {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    UTIL2.getConfiguration().setClass(HConstants.MASTER_IMPL, HMasterForTest.class, HMaster.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    SyncReplicationTestBase.setUp();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Test<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void testRestart() throws Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      SyncReplicationState.STANDBY);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      SyncReplicationState.ACTIVE);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    UTIL1.getAdmin().disableReplicationPeer(PEER_ID);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    write(UTIL1, 0, 100);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    Thread.sleep(2000);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // peer is disabled so no data have been replicated<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    verifyNotReplicatedThroughRegion(UTIL2, 0, 100);<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>    // transit the A to DA first to avoid too many error logs.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    HMaster master = UTIL2.getHBaseCluster().getMaster();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    // make sure the transiting can not succeed<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    FAIL = true;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = master.getMasterProcedureExecutor();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    Thread t = new Thread() {<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>      public void run() {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        try {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID,<a name="line.102"></a>
+<span class="sourceLineNo">103</span>            SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        } catch (IOException e) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>          throw new UncheckedIOException(e);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    };<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    t.start();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // wait until we are in the states where we need to register peer worker when restarting<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    UTIL2.waitFor(60000,<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      () -&gt; procExec.getProcedures().stream().filter(p -&gt; p instanceof RecoverStandbyProcedure)<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        .map(p -&gt; (RecoverStandbyProcedure) p)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        .anyMatch(p -&gt; p.getCurrentStateId() == DISPATCH_WALS_VALUE ||<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          p.getCurrentStateId() == UNREGISTER_PEER_FROM_WORKER_STORAGE_VALUE));<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    // failover to another master<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    MasterThread mt = UTIL2.getMiniHBaseCluster().getMasterThread();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    mt.getMaster().abort("for testing");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    mt.join();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    FAIL = false;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    t.join();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // make sure the new master can finish the transiting<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    assertEquals(SyncReplicationState.DOWNGRADE_ACTIVE,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      UTIL2.getAdmin().getReplicationPeerSyncReplicationState(PEER_ID));<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    verify(UTIL2, 0, 100);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>}<a name="line.127"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[08/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index c4c914c..1c0118e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -786,3190 +786,3192 @@
 <span class="sourceLineNo">778</span>    this.splitOrMergeTracker.start();<a name="line.778"></a>
 <span class="sourceLineNo">779</span><a name="line.779"></a>
 <span class="sourceLineNo">780</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    this.drainingServerTracker.start();<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      // we need to take care of the ZK information synchronization<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      // if given client ZK are not observer nodes<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          false, true);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      this.metaLocationSyncer.start();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      this.masterAddressSyncer.start();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      // set cluster id is a one-go effort<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // going ahead with their startup.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        ", sessionid=0x" +<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    this.snapshotManager = new SnapshotManager();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    this.mpmHost.register(this.snapshotManager);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    this.mpmHost.loadProcedures(conf);<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      MoveRegionProcedure.class);<a name="line.824"></a>
-<span class="sourceLineNo">825</span><a name="line.825"></a>
-<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   */<a name="line.831"></a>
-<span class="sourceLineNo">832</span>  private void checkUnsupportedProcedure(<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      throws HBaseIOException {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // upgrading.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      if (procs != null) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        LOG.error(<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          clazz, procs);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    // it.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        " finish them, and then try to upgrade again.");<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @VisibleForTesting<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return new AssignmentManager(master);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * &lt;p/&gt;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * what you are doing.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;ol&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * descriptors, etc&lt;/li&gt;<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * region server tracker<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * &lt;ol type='i'&gt;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * server&lt;/li&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * from meta region&lt;/li&gt;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * &lt;/ol&gt;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * &lt;/li&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * &lt;/ol&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * &lt;p/&gt;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.904"></a>
-<span class="sourceLineNo">905</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    zombieDetector.setDaemon(true);<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    zombieDetector.start();<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>    /*<a name="line.911"></a>
-<span class="sourceLineNo">912</span>     * We are active master now... go initialize components we need to run.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>     */<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    status.setStatus("Initializing Master file system");<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
-<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    this.drainingServerTracker.start();<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.786"></a>
+<span class="sourceLineNo">787</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>      // we need to take care of the ZK information synchronization<a name="line.789"></a>
+<span class="sourceLineNo">790</span>      // if given client ZK are not observer nodes<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.791"></a>
+<span class="sourceLineNo">792</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          false, true);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      this.metaLocationSyncer.start();<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      this.masterAddressSyncer.start();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      // set cluster id is a one-go effort<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    // going ahead with their startup.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        ", sessionid=0x" +<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.809"></a>
+<span class="sourceLineNo">810</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    this.snapshotManager = new SnapshotManager();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    this.mpmHost.register(this.snapshotManager);<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    this.mpmHost.loadProcedures(conf);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      MoveRegionProcedure.class);<a name="line.823"></a>
+<span class="sourceLineNo">824</span><a name="line.824"></a>
+<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
+<span class="sourceLineNo">831</span>  private void checkUnsupportedProcedure(<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      throws HBaseIOException {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    // upgrading.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>      if (procs != null) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        LOG.error(<a name="line.841"></a>
+<span class="sourceLineNo">842</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.843"></a>
+<span class="sourceLineNo">844</span>          clazz, procs);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      }<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.849"></a>
+<span class="sourceLineNo">850</span>    // it.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        " finish them, and then try to upgrade again.");<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @VisibleForTesting<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return new AssignmentManager(master);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * &lt;p/&gt;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * what you are doing.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;ol&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * descriptors, etc&lt;/li&gt;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * region server tracker<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * &lt;ol type='i'&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * server&lt;/li&gt;<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * from meta region&lt;/li&gt;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   * &lt;/ol&gt;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * &lt;/li&gt;<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   * &lt;/ol&gt;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * &lt;p/&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   */<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.903"></a>
+<span class="sourceLineNo">904</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    zombieDetector.setDaemon(true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    zombieDetector.start();<a name="line.908"></a>
+<span class="sourceLineNo">909</span><a name="line.909"></a>
+<span class="sourceLineNo">910</span>    /*<a name="line.910"></a>
+<span class="sourceLineNo">911</span>     * We are active master now... go initialize components we need to run.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>     */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    status.setStatus("Initializing Master file system");<a name="line.913"></a>
+<span class="sourceLineNo">914</span><a name="line.914"></a>
+<span class="sourceLineNo">915</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      initializeMemStoreChunkCreator();<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.walManager = new MasterWalManager(this);<a name="line.923"></a>
+<span class="sourceLineNo">924</span><a name="line.924"></a>
+<span class="sourceLineNo">925</span>    // enable table descriptors cache<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    this.tableDescriptors.setCacheOn();<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>    // warm-up HTDs cache on master initialization<a name="line.928"></a>
+<span class="sourceLineNo">929</span>    if (preLoadTableDescriptors) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      status.setStatus("Pre-loading table descriptors");<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      this.tableDescriptors.getAll();<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    }<a name="line.932"></a>
+<span class="sourceLineNo">933</span><a name="line.933"></a>
+<span class="sourceLineNo">934</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    this.clusterId = clusterId.toString();<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbase.write.hbck1.lock.file to false.<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.946"></a>
+<span class="sourceLineNo">947</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    // loading.<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    this.serverManager = createServerManager(this);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    createProcedureExecutor();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    @SuppressWarnings("rawtypes")<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.958"></a>
+<span class="sourceLineNo">959</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
-<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span><a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span><a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span><a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span><a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    this.assignmentManager.processOfflineRegions();<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Initialize after meta is up as below scans meta<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      snapshotOfRegionAssignment.initialize();<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // set cluster status again after user regions are assigned<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    this.balancerChore = new BalancerChore(this);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    this.serverManager.startChore();<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    // NAMESPACE READ!!!!<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!waitForNamespaceOnline()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      return;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    status.setStatus("Starting cluster schema service");<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    initClusterSchemaService();<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (this.cpHost != null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      try {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        this.cpHost.preMasterInitialization();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      } catch (IOException e) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    status.markComplete("Initialization successful");<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    configurationManager.registerObserver(this.balancer);<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    // Set master as 'initialized'.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    setInitialized(true);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    if (maintenanceMode) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      return;<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    status.setStatus("Assign meta replicas");<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    metaBootstrap.assignMetaReplicas();<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    status.setStatus("Starting quota manager");<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    initQuotaManager();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // Create the quota snapshot notifier<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span><a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    // master initialization. See HBASE-5916.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span><a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    initMobCleaner();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    if (this.cpHost != null) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      // don't let cp initialization errors kill the master<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      try {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>        this.cpHost.postStartMaster();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      } catch (IOException ioe) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    zombieDetector.interrupt();<a name="line.1187"></a>
+<span class="sourceLineNo">961</span>    checkUnsupportedProcedure(procsByType);<a name="line.961"></a>
+<span class="sourceLineNo">962</span><a name="line.962"></a>
+<span class="sourceLineNo">963</span>    // Create Assignment Manager<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    this.assignmentManager.start();<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.970"></a>
+<span class="sourceLineNo">971</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.971"></a>
+<span class="sourceLineNo">972</span>        .collect(Collectors.toList());<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    this.assignmentManager.setupRIT(ritList);<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    this.regionServerTracker.start(<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    this.tableStateManager =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        ?<a name="line.990"></a>
+<span class="sourceLineNo">991</span>        new MirroringTableStateManager(this):<a name="line.991"></a>
+<span class="sourceLineNo">992</span>        new TableStateManager(this);<a name="line.992"></a>
+<span class="sourceLineNo">993</span><a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Initializing ZK system trackers");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    initializeZKBasedSystemTrackers();<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    try {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    } catch (IOException e) {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          + " from file system", e);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    this.activeMaster = true;<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span><a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    // This is for backwards compatibility<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    // See HBASE-11393<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    tableCFsUpdater.copyTableCFs();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span><a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    if (!maintenanceMode) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      // initialize master side coprocessors before we start handling requests<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      status.setStatus("Initializing master coprocessors");<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    }<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span><a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    // Checking if meta needs initializing.<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    InitMetaProcedure initMetaProc = null;<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    LOG.info("hbase:meta {}", rs);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (rs.isOffline()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>        procedureExecutor.submitProcedure(temp);<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>        return temp;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      });<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // initialize load balancer<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.setMasterServices(this);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    this.balancer.initialize();<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span><a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    // start up all service threads.<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    status.setStatus("Initializing master service threads");<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    startServiceThreads();<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    // wait meta to be initialized after we start procedure executor<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    if (initMetaProc != null) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      initMetaProc.await();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // Wake up this server to check in<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    sleeper.skipSleepCycle();<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span><a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // Wait for region servers to report in.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    String statusStr = "Wait for region servers to report in";<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    status.setStatus(statusStr);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    LOG.info(Objects.toString(status));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    waitForRegionServers(status);<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span><a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (isStopped()) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      return;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    status.setStatus("Starting assignment manager");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // FIRST HBASE:META READ!!!!<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    // available. That's what waitForMetaOnline does.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    if (!waitForMetaOnline()) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      return;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.assignmentManager.joinCluster();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // The below depends on hbase:meta being online.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    this.tableStateManager.start();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    this.assignmentManager.processOfflineRegions();<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    // Initialize after meta is up as below scans meta<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      snapshotOfRegionAssignment.initialize();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span><a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    // set cluster status again after user regions are assigned<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    this.balancerChore = new BalancerChore(this);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    this.serverManager.startChore();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    // NAMESPACE READ!!!!<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    if (!waitForNamespaceOnline()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      return;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    status.setStatus("Starting cluster schema service");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    initClusterSchemaService();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    if (this.cpHost != null) {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      try {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>        this.cpHost.preMasterInitialization();<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      } catch (IOException e) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      }<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    status.markComplete("Initialization successful");<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.balancer);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    // Set master as 'initialized'.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    setInitialized(true);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (maintenanceMode) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>      return;<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span><a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    status.setStatus("Assign meta replicas");<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    metaBootstrap.assignMetaReplicas();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    status.setStatus("Starting quota manager");<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    initQuotaManager();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Create the quota snapshot notifier<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1157"></a>
+<span clas

<TRUNCATED>

[03/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html
index 84cf576..0881870 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html
@@ -154,12 +154,12 @@
 <span class="sourceLineNo">146</span>    this.fs = services.getMasterFileSystem().getWALFileSystem();<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    this.walRootDir = services.getMasterFileSystem().getWALRootDir();<a name="line.147"></a>
 <span class="sourceLineNo">148</span>    this.remoteWALDir = new Path(this.walRootDir, ReplicationUtils.REMOTE_WAL_DIR_NAME);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    MasterProcedureScheduler scheduler =<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      services.getMasterProcedureExecutor().getEnvironment().getProcedureScheduler();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    serverManager.registerListener(new ServerListener() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>      @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      public void serverAdded(ServerName serverName) {<a name="line.154"></a>
+<span class="sourceLineNo">149</span>    serverManager.registerListener(new ServerListener() {<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>      @Override<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      public void serverAdded(ServerName serverName) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        MasterProcedureScheduler scheduler =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          services.getMasterProcedureExecutor().getEnvironment().getProcedureScheduler();<a name="line.154"></a>
 <span class="sourceLineNo">155</span>        for (UsedReplayWorkersForPeer usedWorkers : usedWorkersByPeer.values()) {<a name="line.155"></a>
 <span class="sourceLineNo">156</span>          synchronized (usedWorkers) {<a name="line.156"></a>
 <span class="sourceLineNo">157</span>            usedWorkers.wake(scheduler);<a name="line.157"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html
index 84cf576..0881870 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html
@@ -154,12 +154,12 @@
 <span class="sourceLineNo">146</span>    this.fs = services.getMasterFileSystem().getWALFileSystem();<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    this.walRootDir = services.getMasterFileSystem().getWALRootDir();<a name="line.147"></a>
 <span class="sourceLineNo">148</span>    this.remoteWALDir = new Path(this.walRootDir, ReplicationUtils.REMOTE_WAL_DIR_NAME);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    MasterProcedureScheduler scheduler =<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      services.getMasterProcedureExecutor().getEnvironment().getProcedureScheduler();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    serverManager.registerListener(new ServerListener() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>      @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      public void serverAdded(ServerName serverName) {<a name="line.154"></a>
+<span class="sourceLineNo">149</span>    serverManager.registerListener(new ServerListener() {<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>      @Override<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      public void serverAdded(ServerName serverName) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>        MasterProcedureScheduler scheduler =<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          services.getMasterProcedureExecutor().getEnvironment().getProcedureScheduler();<a name="line.154"></a>
 <span class="sourceLineNo">155</span>        for (UsedReplayWorkersForPeer usedWorkers : usedWorkersByPeer.values()) {<a name="line.155"></a>
 <span class="sourceLineNo">156</span>          synchronized (usedWorkers) {<a name="line.156"></a>
 <span class="sourceLineNo">157</span>            usedWorkers.wake(scheduler);<a name="line.157"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index e87ae21..6e87490 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -461,7 +461,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 8b7e913..71012cf 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -341,7 +341,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 3a7952a..8e04166 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -421,7 +421,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 6d02aac..212ba4d 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -301,7 +301,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 6f7b490..452ee46 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -298,7 +298,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 86cb03a..9175f67 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -501,7 +501,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 27e95bc..3687bf6 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -351,7 +351,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 435edf5..0cdbfd0 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -469,7 +469,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 69325fc..0d3d50e 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -450,7 +450,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 342f0bb..2387f97 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index fb986ce..75034f0 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -381,7 +381,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index dcf755e..1e54d14 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -779,7 +779,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index ed6f6b9..946905c 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -345,7 +345,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index dd5454b..5c154ec 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -315,7 +315,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index f755260..779c2eb 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 1f5442c..1f8fd99 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -318,7 +318,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index b50a920..3981bc2 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -313,7 +313,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 00ef3f8..45776f6 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 7428be4..9321504 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -309,7 +309,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 10ec9d0..7715939 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -343,7 +343,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index ed41cb1..a23a741 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -530,7 +530,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 2a9e645..9c4b5b1 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -776,7 +776,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 524b742..ecc8a40 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1887,6 +1887,8 @@
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSplitter.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestRegionSplitter</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestRegionState.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestRegionState</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionStates</a></li>
+<li><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestRegisterPeerWorkerWhenRestarting</a></li>
+<li><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/client/TestRemoteAdminRetries.html" title="class in org.apache.hadoop.hbase.rest.client" target="classFrame">TestRemoteAdminRetries</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/client/TestRemoteAdminRetries.CallExecutor.html" title="interface in org.apache.hadoop.hbase.rest.client" target="classFrame"><span class="interfaceName">TestRemoteAdminRetries.CallExecutor</span></a></li>
 <li><a href="org/apache/hadoop/hbase/backup/TestRemoteBackup.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestRemoteBackup</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 246d41d..fd679e1 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1887,6 +1887,8 @@
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSplitter.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitter</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestRegionState.html" title="class in org.apache.hadoop.hbase.master">TestRegionState</a></li>
 <li><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></li>
+<li><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting</a></li>
+<li><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/client/TestRemoteAdminRetries.html" title="class in org.apache.hadoop.hbase.rest.client">TestRemoteAdminRetries</a></li>
 <li><a href="org/apache/hadoop/hbase/rest/client/TestRemoteAdminRetries.CallExecutor.html" title="interface in org.apache.hadoop.hbase.rest.client"><span class="interfaceName">TestRemoteAdminRetries.CallExecutor</span></a></li>
 <li><a href="org/apache/hadoop/hbase/backup/TestRemoteBackup.html" title="class in org.apache.hadoop.hbase.backup">TestRemoteBackup</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 6fd92ff..98b59e9 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -5345,6 +5345,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html" title="class in org.apache.hadoop.hbase.master.replication">TestModifyPeerProcedureRetryBackoff</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class 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">TestRegisterPeerWorkerWhenRestarting</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">TestSyncReplicationReplayWALManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureBackoff</a></dt>
@@ -14071,6 +14073,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html#FAIL">FAIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html" title="class in org.apache.hadoop.hbase.master.replication">TestModifyPeerProcedureRetryBackoff</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#FAIL">FAIL</a></span> - Static variable in class 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">TestRegisterPeerWorkerWhenRestarting</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html#FAIL">FAIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureBackoff</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html#fail">fail</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore.FailingHRegionFileSystem</a></dt>
@@ -20601,6 +20605,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportRegionStateTransitionRetry.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportRegionStateTransitionRetry.HMasterForTest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html#HMasterForTest-org.apache.hadoop.conf.Configuration-">HMasterForTest(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.html#hmm">hmm</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMetricsHeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestMetricsHeapMemoryManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.html#HOARD_FRC_OF_REGIONS">HOARD_FRC_OF_REGIONS</a></span> - Static variable in class org.apache.hadoop.hbase.chaos.actions.<a href="org/apache/hadoop/hbase/chaos/actions/UnbalanceKillAndRebalanceAction.html" title="class in org.apache.hadoop.hbase.chaos.actions">UnbalanceKillAndRebalanceAction</a></dt>
@@ -33835,6 +33841,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#remoteLogDir">remoteLogDir</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html#remoteProcedureCompleted-long-">remoteProcedureCompleted(long)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#remoteRpcCallsHistogram">remoteRpcCallsHistogram</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseClusterManager.RemoteShell.html#RemoteShell-java.lang.String-java.lang.String:A-java.io.File-java.util.Map-long-">RemoteShell(String, String[], File, Map&lt;String, String&gt;, long)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseClusterManager.RemoteShell.html" title="class in org.apache.hadoop.hbase">HBaseClusterManager.RemoteShell</a></dt>
@@ -37949,6 +37957,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html" title="class in org.apache.hadoop.hbase.master.replication">TestModifyPeerProcedureRetryBackoff</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#setUp--">setUp()</a></span> - Static method in class 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">TestRegisterPeerWorkerWhenRestarting</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">TestSyncReplicationReplayWALManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html" title="class in org.apache.hadoop.hbase.master.replication">TestTransitPeerSyncReplicationStateProcedureBackoff</a></dt>
@@ -60498,6 +60508,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/impl/TestMetricRegistryImpl.html#testRegisterGaugeLambda--">testRegisterGaugeLambda()</a></span> - Method in class org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/TestMetricRegistryImpl.html" title="class in org.apache.hadoop.hbase.metrics.impl">TestMetricRegistryImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><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> - Class in <a href="org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a></dt>
+<dd>
+<div class="block">Testcase for HBASE-21494.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#TestRegisterPeerWorkerWhenRestarting--">TestRegisterPeerWorkerWhenRestarting()</a></span> - Constructor for class 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">TestRegisterPeerWorkerWhenRestarting</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.HMasterForTest.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">TestRegisterPeerWorkerWhenRestarting.HMasterForTest</span></a> - Class in <a href="org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcess.MyConnectionImpl.TestRegistry.html#TestRegistry-org.apache.hadoop.conf.Configuration-">TestRegistry(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcess.MyConnectionImpl.TestRegistry.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcess.MyConnectionImpl.TestRegistry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestByteBufferUtils.html#testRelativeCopyFromBuffertoBuffer--">testRelativeCopyFromBuffertoBuffer()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferUtils</a></dt>
@@ -61250,6 +61268,8 @@
 <dd>
 <div class="block">Test a some methods of class Response.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#testRestart--">testRestart()</a></span> - Method in class 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">TestRegisterPeerWorkerWhenRestarting</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/TestRestartCluster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestRestartCluster</span></a> - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestRestartCluster.html#TestRestartCluster--">TestRestartCluster()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestRestartCluster.html" title="class in org.apache.hadoop.hbase.master">TestRestartCluster</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 76d6f84..ffa988b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -3911,18 +3911,22 @@
 <tbody>
 <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">TestTransitPeerSyncReplicationStateProcedureRetry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegisterPeerWorkerWhenRestarting.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestModifyPeerProcedureRetryBackoff.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestTransitPeerSyncReplicationStateProcedureRetry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureRetry.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestTransitPeerSyncReplicationStateProcedureBackoff.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestModifyPeerProcedureRetryBackoff.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestTransitPeerSyncReplicationStateProcedureBackoff.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestTransitPeerSyncReplicationStateProcedureBackoff.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSyncReplicationReplayWALManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/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 2244199..47e693c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" target="_top">Frames</a></li>
@@ -583,7 +583,7 @@ extends org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</pre>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestSyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/replication/TestModifyPeerProcedureRetryBackoff.TestModifyPeerProcedure.html" target="_top">Frames</a></li>

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


[11/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.


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

Branch: refs/heads/asf-site
Commit: 18058c93915e2c62a83e79a252261315168a89b4
Parents: a4ed4d2
Author: jenkins <bu...@apache.org>
Authored: Mon Nov 19 14:53:21 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Mon Nov 19 14:53:21 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |  286 +-
 checkstyle.rss                                  |   16 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    4 +-
 .../master/HMaster.MasterStoppedException.html  |    4 +-
 .../master/HMaster.TableDescriptorGetter.html   |    4 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |  326 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../master/HMaster.InitializationMonitor.html   | 6322 +++++++++---------
 .../master/HMaster.MasterStoppedException.html  | 6322 +++++++++---------
 .../hbase/master/HMaster.RedirectServlet.html   | 6322 +++++++++---------
 .../master/HMaster.TableDescriptorGetter.html   | 6322 +++++++++---------
 .../org/apache/hadoop/hbase/master/HMaster.html | 6322 +++++++++---------
 ...playWALManager.UsedReplayWorkersForPeer.html |   12 +-
 .../SyncReplicationReplayWALManager.html        |   12 +-
 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            |    2 +
 testdevapidocs/allclasses-noframe.html          |    2 +
 testdevapidocs/index-all.html                   |   20 +
 .../hbase/class-use/HBaseClassTestRule.html     |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 ...ureRetryBackoff.TestModifyPeerProcedure.html |    4 +-
 ...PeerWorkerWhenRestarting.HMasterForTest.html |  406 ++
 .../TestRegisterPeerWorkerWhenRestarting.html   |  383 ++
 .../TestSyncReplicationReplayWALManager.html    |    4 +-
 ...tPeerSyncReplicationStateProcedureRetry.html |   10 +-
 ...PeerWorkerWhenRestarting.HMasterForTest.html |  125 +
 .../TestRegisterPeerWorkerWhenRestarting.html   |  125 +
 .../hbase/master/replication/package-frame.html |    2 +
 .../master/replication/package-summary.html     |   10 +
 .../hbase/master/replication/package-tree.html  |   14 +
 .../org/apache/hadoop/hbase/package-tree.html   |   10 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../replication/SyncReplicationTestBase.html    |    2 +-
 .../class-use/SyncReplicationTestBase.html      |    6 +
 .../apache/hadoop/hbase/test/package-tree.html  |    4 +-
 testdevapidocs/overview-tree.html               |    2 +
 ...PeerWorkerWhenRestarting.HMasterForTest.html |  199 +
 .../TestRegisterPeerWorkerWhenRestarting.html   |  199 +
 ...tPeerSyncReplicationStateProcedureRetry.html |  155 +-
 70 files changed, 17817 insertions(+), 16289 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 6587d1a..7a8622e 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -611,7 +611,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 969de13..7afef34 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:20181118143229+00'00')
-/CreationDate (D:20181118144728+00'00')
+/ModDate (D:20181119143337+00'00')
+/CreationDate (D:20181119145001+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index b8e8bf0..3733931 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-18 14:32:29 UTC
+Last updated 2018-11-19 14:33:37 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index ef8c2c6..960fdc4 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -316,7 +316,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 923391f..e99da79 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,7 +291,7 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3810</td>
+<td>3811</td>
 <td>0</td>
 <td>0</td>
 <td>14996</td></tr></table></div>
@@ -60193,835 +60193,835 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>806</td></tr>
+<td>805</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
-<td>Method length is 295 lines (max allowed is 150).</td>
-<td>904</td></tr>
+<td>Method length is 298 lines (max allowed is 150).</td>
+<td>903</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1411</td></tr>
+<td>1413</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1413</td></tr>
+<td>1415</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1415</td></tr>
+<td>1417</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1417</td></tr>
+<td>1419</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1419</td></tr>
+<td>1421</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1427</td></tr>
+<td>1429</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1428</td></tr>
+<td>1430</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1433</td></tr>
+<td>1435</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1434</td></tr>
+<td>1436</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1648</td></tr>
+<td>1650</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1670</td></tr>
+<td>1672</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1687</td></tr>
+<td>1689</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1722</td></tr>
+<td>1724</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>1875</td></tr>
+<td>1877</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>1879</td></tr>
+<td>1881</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1891</td></tr>
+<td>1893</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1893</td></tr>
+<td>1895</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1895</td></tr>
+<td>1897</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1898</td></tr>
+<td>1900</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1901</td></tr>
+<td>1903</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1902</td></tr>
+<td>1904</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1904</td></tr>
+<td>1906</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1906</td></tr>
+<td>1908</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1907</td></tr>
+<td>1909</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1908</td></tr>
+<td>1910</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1914</td></tr>
+<td>1916</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1918</td></tr>
+<td>1920</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1920</td></tr>
+<td>1922</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1921</td></tr>
+<td>1923</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1924</td></tr>
+<td>1926</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1925</td></tr>
+<td>1927</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1927</td></tr>
+<td>1929</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1929</td></tr>
+<td>1931</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1930</td></tr>
+<td>1932</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1931</td></tr>
+<td>1933</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>1950</td></tr>
+<td>1952</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>1952</td></tr>
+<td>1954</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2043</td></tr>
+<td>2045</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2045</td></tr>
+<td>2047</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2047</td></tr>
+<td>2049</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2054</td></tr>
+<td>2056</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2055</td></tr>
+<td>2057</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2057</td></tr>
+<td>2059</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2059</td></tr>
+<td>2061</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2060</td></tr>
+<td>2062</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2062</td></tr>
+<td>2064</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2064</td></tr>
+<td>2066</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2065</td></tr>
+<td>2067</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2066</td></tr>
+<td>2068</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2096</td></tr>
+<td>2098</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2358</td></tr>
+<td>2360</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2359</td></tr>
+<td>2361</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2366</td></tr>
+<td>2368</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2367</td></tr>
+<td>2369</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2373</td></tr>
+<td>2375</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2374</td></tr>
+<td>2376</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2381</td></tr>
+<td>2383</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2382</td></tr>
+<td>2384</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2387</td></tr>
+<td>2389</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2405</td></tr>
+<td>2407</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2407</td></tr>
+<td>2409</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2409</td></tr>
+<td>2411</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2415</td></tr>
+<td>2417</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2416</td></tr>
+<td>2418</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2418</td></tr>
+<td>2420</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2420</td></tr>
+<td>2422</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2421</td></tr>
+<td>2423</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2423</td></tr>
+<td>2425</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2425</td></tr>
+<td>2427</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2426</td></tr>
+<td>2428</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2427</td></tr>
+<td>2429</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2440</td></tr>
+<td>2442</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2442</td></tr>
+<td>2444</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2444</td></tr>
+<td>2446</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2445</td></tr>
+<td>2447</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2446</td></tr>
+<td>2448</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2448</td></tr>
+<td>2450</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2450</td></tr>
+<td>2452</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2451</td></tr>
+<td>2453</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2453</td></tr>
+<td>2455</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2455</td></tr>
+<td>2457</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2456</td></tr>
+<td>2458</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2457</td></tr>
+<td>2459</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2540</td></tr>
+<td>2542</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2542</td></tr>
+<td>2544</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2548</td></tr>
+<td>2550</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2549</td></tr>
+<td>2551</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2550</td></tr>
+<td>2552</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2551</td></tr>
+<td>2553</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2552</td></tr>
+<td>2554</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2553</td></tr>
+<td>2555</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2554</td></tr>
+<td>2556</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 16, expected level should be one of the following: 18, 20.</td>
-<td>2555</td></tr>
+<td>2557</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2557</td></tr>
+<td>2559</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2558</td></tr>
+<td>2560</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2559</td></tr>
+<td>2561</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2560</td></tr>
+<td>2562</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2561</td></tr>
+<td>2563</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2562</td></tr>
+<td>2564</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2564</td></tr>
+<td>2566</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2571</td></tr>
+<td>2573</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2572</td></tr>
+<td>2574</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2574</td></tr>
+<td>2576</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2576</td></tr>
+<td>2578</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2577</td></tr>
+<td>2579</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2579</td></tr>
+<td>2581</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2581</td></tr>
+<td>2583</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2582</td></tr>
+<td>2584</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2583</td></tr>
+<td>2585</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2593</td></tr>
+<td>2595</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2595</td></tr>
+<td>2597</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2597</td></tr>
+<td>2599</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2607</td></tr>
+<td>2609</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2608</td></tr>
+<td>2610</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2610</td></tr>
+<td>2612</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2612</td></tr>
+<td>2614</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2613</td></tr>
+<td>2615</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2615</td></tr>
+<td>2617</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2617</td></tr>
+<td>2619</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2618</td></tr>
+<td>2620</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2619</td></tr>
+<td>2621</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2631</td></tr>
+<td>2633</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2716</td></tr>
+<td>2718</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2720</td></tr>
+<td>2722</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2722</td></tr>
+<td>2724</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2724</td></tr>
+<td>2726</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2725</td></tr>
+<td>2727</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2726</td></tr>
+<td>2728</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3184</td></tr>
+<td>3186</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3360</td></tr>
+<td>3362</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3362</td></tr>
+<td>3364</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3455</td></tr>
+<td>3457</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>3485</td></tr>
+<td>3487</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3492</td></tr>
+<td>3494</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3497</td></tr>
+<td>3499</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3526</td></tr>
+<td>3528</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
-<td>3624</td></tr></table></div>
+<td>3626</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</h3>
 <table border="0" class="table table-striped">
@@ -116753,7 +116753,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-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index c3a9586..ced5768 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,7 +25,7 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3810,
+      <title>File: 3811,
              Errors: 14996,
              Warnings: 0,
              Infos: 0
@@ -50334,6 +50334,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.replication.TestRegisterPeerWorkerWhenRestarting.java">org/apache/hadoop/hbase/master/replication/TestRegisterPeerWorkerWhenRestarting.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.rest.StorageClusterVersionResource.java">org/apache/hadoop/hbase/rest/StorageClusterVersionResource.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 36f8e86..1e8c313 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -385,7 +385,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 70f0ce8..e3a5cce 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 9d3c12c..7ac84d2 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -680,7 +680,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 3a20ed1..15b6964 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -323,7 +323,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 8eace5a..c3d4a8c 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="20181118" />
+    <meta name="Date-Revision-yyyymmdd" content="20181119" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1009,7 +1009,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-18</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 20990a6..fe24cdf 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,7 +3824,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Sun Nov 18 14:42:24 UTC 2018"</code></td>
+<td class="colLast"><code>"Mon Nov 19 14:44:53 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3838,7 +3838,7 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"4fbe199ed220266679ec9666c302e242"</code></td>
+<td class="colLast"><code>"354946859721123895ba2f38486ee8a8"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 132d983..d071c87 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -136,7 +136,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3065">HMaster.MasterStoppedException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3067">HMaster.MasterStoppedException</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MasterStoppedException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.3066">MasterStoppedException</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.3068">MasterStoppedException</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index 196b7c0..ec275a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2484">HMaster.TableDescriptorGetter</a></pre>
+<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2486">HMaster.TableDescriptorGetter</a></pre>
 <div class="block">Implement to return TableDescriptor after pre-checks</div>
 </li>
 </ul>
@@ -150,7 +150,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2485">get</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2487">get</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>


[05/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index c4c914c..1c0118e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
@@ -786,3190 +786,3192 @@
 <span class="sourceLineNo">778</span>    this.splitOrMergeTracker.start();<a name="line.778"></a>
 <span class="sourceLineNo">779</span><a name="line.779"></a>
 <span class="sourceLineNo">780</span>    this.replicationPeerManager = ReplicationPeerManager.create(zooKeeper, conf);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    this.drainingServerTracker.start();<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      // we need to take care of the ZK information synchronization<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      // if given client ZK are not observer nodes<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          false, true);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      this.metaLocationSyncer.start();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      this.masterAddressSyncer.start();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      // set cluster id is a one-go effort<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    // going ahead with their startup.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        ", sessionid=0x" +<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.811"></a>
-<span class="sourceLineNo">812</span><a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    this.snapshotManager = new SnapshotManager();<a name="line.814"></a>
-<span class="sourceLineNo">815</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    this.mpmHost.register(this.snapshotManager);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    this.mpmHost.loadProcedures(conf);<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>  }<a name="line.820"></a>
-<span class="sourceLineNo">821</span><a name="line.821"></a>
-<span class="sourceLineNo">822</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      MoveRegionProcedure.class);<a name="line.824"></a>
-<span class="sourceLineNo">825</span><a name="line.825"></a>
-<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   */<a name="line.831"></a>
-<span class="sourceLineNo">832</span>  private void checkUnsupportedProcedure(<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      throws HBaseIOException {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    // upgrading.<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      if (procs != null) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        LOG.error(<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.843"></a>
-<span class="sourceLineNo">844</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          clazz, procs);<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      }<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    }<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    // it.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        " finish them, and then try to upgrade again.");<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>  }<a name="line.859"></a>
-<span class="sourceLineNo">860</span><a name="line.860"></a>
-<span class="sourceLineNo">861</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @VisibleForTesting<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return new AssignmentManager(master);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * &lt;p/&gt;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * what you are doing.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;ol&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   * descriptors, etc&lt;/li&gt;<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * region server tracker<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * &lt;ol type='i'&gt;<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * server&lt;/li&gt;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.883"></a>
-<span class="sourceLineNo">884</span>   * from meta region&lt;/li&gt;<a name="line.884"></a>
-<span class="sourceLineNo">885</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   * &lt;/ol&gt;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>   * &lt;/li&gt;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.898"></a>
-<span class="sourceLineNo">899</span>   * &lt;/ol&gt;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>   * &lt;p/&gt;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.901"></a>
-<span class="sourceLineNo">902</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.902"></a>
-<span class="sourceLineNo">903</span>   */<a name="line.903"></a>
-<span class="sourceLineNo">904</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.904"></a>
-<span class="sourceLineNo">905</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.907"></a>
-<span class="sourceLineNo">908</span>    zombieDetector.setDaemon(true);<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    zombieDetector.start();<a name="line.909"></a>
-<span class="sourceLineNo">910</span><a name="line.910"></a>
-<span class="sourceLineNo">911</span>    /*<a name="line.911"></a>
-<span class="sourceLineNo">912</span>     * We are active master now... go initialize components we need to run.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>     */<a name="line.913"></a>
-<span class="sourceLineNo">914</span>    status.setStatus("Initializing Master file system");<a name="line.914"></a>
-<span class="sourceLineNo">915</span><a name="line.915"></a>
-<span class="sourceLineNo">916</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.917"></a>
-<span class="sourceLineNo">918</span><a name="line.918"></a>
-<span class="sourceLineNo">919</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      initializeMemStoreChunkCreator();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    this.walManager = new MasterWalManager(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    // enable table descriptors cache<a name="line.926"></a>
-<span class="sourceLineNo">927</span>    this.tableDescriptors.setCacheOn();<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>    // warm-up HTDs cache on master initialization<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    if (preLoadTableDescriptors) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      status.setStatus("Pre-loading table descriptors");<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      this.tableDescriptors.getAll();<a name="line.932"></a>
-<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    this.clusterId = clusterId.toString();<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.943"></a>
-<span class="sourceLineNo">944</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    // hbase.write.hbck1.lock.file to false.<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.947"></a>
-<span class="sourceLineNo">948</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    this.serverManager = createServerManager(this);<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    createProcedureExecutor();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    @SuppressWarnings("rawtypes")<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.957"></a>
-<span class="sourceLineNo">958</span><a name="line.958"></a>
-<span class="sourceLineNo">959</span>    checkUnsupportedProcedure(procsByType);<a name="line.959"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>    this.drainingServerTracker = new DrainingServerTracker(zooKeeper, this, this.serverManager);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    this.drainingServerTracker.start();<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    String clientQuorumServers = conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    boolean clientZkObserverMode = conf.getBoolean(HConstants.CLIENT_ZOOKEEPER_OBSERVER_MODE,<a name="line.786"></a>
+<span class="sourceLineNo">787</span>      HConstants.DEFAULT_CLIENT_ZOOKEEPER_OBSERVER_MODE);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    if (clientQuorumServers != null &amp;&amp; !clientZkObserverMode) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>      // we need to take care of the ZK information synchronization<a name="line.789"></a>
+<span class="sourceLineNo">790</span>      // if given client ZK are not observer nodes<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      ZKWatcher clientZkWatcher = new ZKWatcher(conf,<a name="line.791"></a>
+<span class="sourceLineNo">792</span>          getProcessName() + ":" + rpcServices.getSocketAddress().getPort() + "-clientZK", this,<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          false, true);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      this.metaLocationSyncer = new MetaLocationSyncer(zooKeeper, clientZkWatcher, this);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      this.metaLocationSyncer.start();<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      this.masterAddressSyncer = new MasterAddressSyncer(zooKeeper, clientZkWatcher, this);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      this.masterAddressSyncer.start();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      // set cluster id is a one-go effort<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      ZKClusterId.setClusterId(clientZkWatcher, fileSystemManager.getClusterId());<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span>    // Set the cluster as up.  If new RSs, they'll be waiting on this before<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    // going ahead with their startup.<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    boolean wasUp = this.clusterStatusTracker.isClusterUp();<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    if (!wasUp) this.clusterStatusTracker.setClusterUp();<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("Active/primary master=" + this.serverName +<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        ", sessionid=0x" +<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()) +<a name="line.809"></a>
+<span class="sourceLineNo">810</span>        ", setting cluster-up flag (Was=" + wasUp + ")");<a name="line.810"></a>
+<span class="sourceLineNo">811</span><a name="line.811"></a>
+<span class="sourceLineNo">812</span>    // create/initialize the snapshot manager and other procedure managers<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    this.snapshotManager = new SnapshotManager();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    this.mpmHost = new MasterProcedureManagerHost();<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    this.mpmHost.register(this.snapshotManager);<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    this.mpmHost.register(new MasterFlushTableProcedureManager());<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    this.mpmHost.loadProcedures(conf);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    this.mpmHost.initialize(this, this.metricsMaster);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private static final ImmutableSet&lt;Class&lt;? extends Procedure&gt;&gt; UNSUPPORTED_PROCEDURES =<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    ImmutableSet.of(RecoverMetaProcedure.class, AssignProcedure.class, UnassignProcedure.class,<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      MoveRegionProcedure.class);<a name="line.823"></a>
+<span class="sourceLineNo">824</span><a name="line.824"></a>
+<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * make sure that there are none these procedures when upgrading. If there are, the master will<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * quit, you need to go back to the old version to finish these procedures first before upgrading.<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   */<a name="line.830"></a>
+<span class="sourceLineNo">831</span>  private void checkUnsupportedProcedure(<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType)<a name="line.832"></a>
+<span class="sourceLineNo">833</span>      throws HBaseIOException {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Confirm that we do not have unfinished assign/unassign related procedures. It is not easy to<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    // support both the old assign/unassign procedures and the new TransitRegionStateProcedure as<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    // there will be conflict in the code for AM. We should finish all these procedures before<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    // upgrading.<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (Class&lt;? extends Procedure&gt; clazz : UNSUPPORTED_PROCEDURES) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procs = procsByType.get(clazz);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>      if (procs != null) {<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        LOG.error(<a name="line.841"></a>
+<span class="sourceLineNo">842</span>          "Unsupported procedure type {} found, please rollback your master to the old" +<a name="line.842"></a>
+<span class="sourceLineNo">843</span>            " version to finish them, and then try to upgrade again. The full procedure list: {}",<a name="line.843"></a>
+<span class="sourceLineNo">844</span>          clazz, procs);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>        throw new HBaseIOException("Unsupported procedure type " + clazz + " found");<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      }<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    // A special check for SCP, as we do not support RecoverMetaProcedure any more so we need to<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    // make sure that no one will try to schedule it but SCP does have a state which will schedule<a name="line.849"></a>
+<span class="sourceLineNo">850</span>    // it.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    if (procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      .map(p -&gt; (ServerCrashProcedure) p).anyMatch(ServerCrashProcedure::isInRecoverMetaState)) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      LOG.error("At least one ServerCrashProcedure is going to schedule a RecoverMetaProcedure," +<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        " which is not supported any more. Please rollback your master to the old version to" +<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        " finish them, and then try to upgrade again.");<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      throw new HBaseIOException("Unsupported procedure state found for ServerCrashProcedure");<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  // Will be overriden in test to inject customized AssignmentManager<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @VisibleForTesting<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  protected AssignmentManager createAssignmentManager(MasterServices master) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return new AssignmentManager(master);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Finish initialization of HMaster after becoming the primary master.<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * &lt;p/&gt;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * The startup order is a bit complicated but very important, do not change it unless you know<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * what you are doing.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;ol&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * &lt;li&gt;Initialize file system based components - file system manager, wal manager, table<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * descriptors, etc&lt;/li&gt;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * &lt;li&gt;Publish cluster id&lt;/li&gt;<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * &lt;li&gt;Here comes the most complicated part - initialize server manager, assignment manager and<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * region server tracker<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * &lt;ol type='i'&gt;<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * &lt;li&gt;Create server manager&lt;/li&gt;<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * &lt;li&gt;Create procedure executor, load the procedures, but do not start workers. We will start it<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * later after we finish scheduling SCPs to avoid scheduling duplicated SCPs for the same<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * server&lt;/li&gt;<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   * &lt;li&gt;Create assignment manager and start it, load the meta region state, but do not load data<a name="line.882"></a>
+<span class="sourceLineNo">883</span>   * from meta region&lt;/li&gt;<a name="line.883"></a>
+<span class="sourceLineNo">884</span>   * &lt;li&gt;Start region server tracker, construct the online servers set and find out dead servers and<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * schedule SCP for them. The online servers will be constructed by scanning zk, and we will also<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * scan the wal directory to find out possible live region servers, and the differences between<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * these two sets are the dead servers&lt;/li&gt;<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   * &lt;/ol&gt;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>   * &lt;/li&gt;<a name="line.889"></a>
+<span class="sourceLineNo">890</span>   * &lt;li&gt;If this is a new deploy, schedule a InitMetaProcedure to initialize meta&lt;/li&gt;<a name="line.890"></a>
+<span class="sourceLineNo">891</span>   * &lt;li&gt;Start necessary service threads - balancer, catalog janior, executor services, and also the<a name="line.891"></a>
+<span class="sourceLineNo">892</span>   * procedure executor, etc. Notice that the balancer must be created first as assignment manager<a name="line.892"></a>
+<span class="sourceLineNo">893</span>   * may use it when assigning regions.&lt;/li&gt;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * &lt;li&gt;Wait for meta to be initialized if necesssary, start table state manager.&lt;/li&gt;<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * &lt;li&gt;Wait for enough region servers to check-in&lt;/li&gt;<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   * &lt;li&gt;Let assignment manager load data from meta and construct region states&lt;/li&gt;<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   * &lt;li&gt;Start all other things such as chore services, etc&lt;/li&gt;<a name="line.897"></a>
+<span class="sourceLineNo">898</span>   * &lt;/ol&gt;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>   * &lt;p/&gt;<a name="line.899"></a>
+<span class="sourceLineNo">900</span>   * Notice that now we will not schedule a special procedure to make meta online(unless the first<a name="line.900"></a>
+<span class="sourceLineNo">901</span>   * time where meta has not been created yet), we will rely on SCP to bring meta online.<a name="line.901"></a>
+<span class="sourceLineNo">902</span>   */<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  private void finishActiveMasterInitialization(MonitoredTask status) throws IOException,<a name="line.903"></a>
+<span class="sourceLineNo">904</span>          InterruptedException, KeeperException, ReplicationException {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>    Thread zombieDetector = new Thread(new InitializationMonitor(this),<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        "ActiveMasterInitializationMonitor-" + System.currentTimeMillis());<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    zombieDetector.setDaemon(true);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    zombieDetector.start();<a name="line.908"></a>
+<span class="sourceLineNo">909</span><a name="line.909"></a>
+<span class="sourceLineNo">910</span>    /*<a name="line.910"></a>
+<span class="sourceLineNo">911</span>     * We are active master now... go initialize components we need to run.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>     */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    status.setStatus("Initializing Master file system");<a name="line.913"></a>
+<span class="sourceLineNo">914</span><a name="line.914"></a>
+<span class="sourceLineNo">915</span>    this.masterActiveTime = System.currentTimeMillis();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    // TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.<a name="line.916"></a>
+<span class="sourceLineNo">917</span><a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Only initialize the MemStoreLAB when master carry table<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    if (LoadBalancer.isTablesOnMaster(conf)) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      initializeMemStoreChunkCreator();<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    this.fileSystemManager = new MasterFileSystem(conf);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    this.walManager = new MasterWalManager(this);<a name="line.923"></a>
+<span class="sourceLineNo">924</span><a name="line.924"></a>
+<span class="sourceLineNo">925</span>    // enable table descriptors cache<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    this.tableDescriptors.setCacheOn();<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>    // warm-up HTDs cache on master initialization<a name="line.928"></a>
+<span class="sourceLineNo">929</span>    if (preLoadTableDescriptors) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>      status.setStatus("Pre-loading table descriptors");<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      this.tableDescriptors.getAll();<a name="line.931"></a>
+<span class="sourceLineNo">932</span>    }<a name="line.932"></a>
+<span class="sourceLineNo">933</span><a name="line.933"></a>
+<span class="sourceLineNo">934</span>    // Publish cluster ID; set it in Master too. The superclass RegionServer does this later but<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    // only after it has checked in with the Master. At least a few tests ask Master for clusterId<a name="line.935"></a>
+<span class="sourceLineNo">936</span>    // before it has called its run method and before RegionServer has done the reportForDuty.<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    ClusterId clusterId = fileSystemManager.getClusterId();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>    status.setStatus("Publishing Cluster ID " + clusterId + " in ZooKeeper");<a name="line.938"></a>
+<span class="sourceLineNo">939</span>    ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    this.clusterId = clusterId.toString();<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>    // Precaution. Put in place the old hbck1 lock file to fence out old hbase1s running their<a name="line.942"></a>
+<span class="sourceLineNo">943</span>    // hbck1s against an hbase2 cluster; it could do damage. To skip this behavior, set<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    // hbase.write.hbck1.lock.file to false.<a name="line.944"></a>
+<span class="sourceLineNo">945</span>    if (this.conf.getBoolean("hbase.write.hbck1.lock.file", true)) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      HBaseFsck.checkAndMarkRunningHbck(this.conf,<a name="line.946"></a>
+<span class="sourceLineNo">947</span>          HBaseFsck.createLockRetryCounterFactory(this.conf).create());<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    status.setStatus("Initialize ServerManager and schedule SCP for crash servers");<a name="line.950"></a>
+<span class="sourceLineNo">951</span>    // The below two managers must be created before loading procedures, as they will be used during<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    // loading.<a name="line.952"></a>
+<span class="sourceLineNo">953</span>    this.serverManager = createServerManager(this);<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    this.syncReplicationReplayWALManager = new SyncReplicationReplayWALManager(this);<a name="line.954"></a>
+<span class="sourceLineNo">955</span>    createProcedureExecutor();<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    @SuppressWarnings("rawtypes")<a name="line.956"></a>
+<span class="sourceLineNo">957</span>    Map&lt;Class&lt;? extends Procedure&gt;, List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt;&gt; procsByType =<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      procedureExecutor.getActiveProceduresNoCopy().stream()<a name="line.958"></a>
+<span class="sourceLineNo">959</span>        .collect(Collectors.groupingBy(p -&gt; p.getClass()));<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    // Create Assignment Manager<a name="line.961"></a>
-<span class="sourceLineNo">962</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    this.assignmentManager.start();<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.964"></a>
-<span class="sourceLineNo">965</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.968"></a>
-<span class="sourceLineNo">969</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        .collect(Collectors.toList());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>    this.assignmentManager.setupRIT(ritList);<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.976"></a>
-<span class="sourceLineNo">977</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    this.regionServerTracker.start(<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.985"></a>
-<span class="sourceLineNo">986</span>    this.tableStateManager =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.987"></a>
-<span class="sourceLineNo">988</span>        ?<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        new MirroringTableStateManager(this):<a name="line.989"></a>
-<span class="sourceLineNo">990</span>        new TableStateManager(this);<a name="line.990"></a>
-<span class="sourceLineNo">991</span><a name="line.991"></a>
-<span class="sourceLineNo">992</span>    status.setStatus("Initializing ZK system trackers");<a name="line.992"></a>
-<span class="sourceLineNo">993</span>    initializeZKBasedSystemTrackers();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    try {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    } catch (IOException e) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          + " from file system", e);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    this.activeMaster = true;<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span><a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    // This is for backwards compatibility<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    // See HBASE-11393<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    tableCFsUpdater.copyTableCFs();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span><a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    if (!maintenanceMode) {<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // initialize master side coprocessors before we start handling requests<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      status.setStatus("Initializing master coprocessors");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    // Checking if meta needs initializing.<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    InitMetaProcedure initMetaProc = null;<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    LOG.info("hbase:meta {}", rs);<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    if (rs.isOffline()) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>        procedureExecutor.submitProcedure(temp);<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        return temp;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>      });<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    // initialize load balancer<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    this.balancer.setMasterServices(this);<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    this.balancer.initialize();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span><a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    // start up all service threads.<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    status.setStatus("Initializing master service threads");<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    startServiceThreads();<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    // wait meta to be initialized after we start procedure executor<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    if (initMetaProc != null) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>      initMetaProc.await();<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    // Wake up this server to check in<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    sleeper.skipSleepCycle();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span><a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    // Wait for region servers to report in.<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    String statusStr = "Wait for region servers to report in";<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    status.setStatus(statusStr);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    LOG.info(Objects.toString(status));<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    waitForRegionServers(status);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span><a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    if (isStopped()) {<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      return;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    status.setStatus("Starting assignment manager");<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // FIRST HBASE:META READ!!!!<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    // available. That's what waitForMetaOnline does.<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    if (!waitForMetaOnline()) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      return;<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    this.assignmentManager.joinCluster();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    // The below depends on hbase:meta being online.<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    this.tableStateManager.start();<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    this.assignmentManager.processOfflineRegions();<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Initialize after meta is up as below scans meta<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      snapshotOfRegionAssignment.initialize();<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span><a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    // set cluster status again after user regions are assigned<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    this.balancerChore = new BalancerChore(this);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>    this.serverManager.startChore();<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>    // NAMESPACE READ!!!!<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!waitForNamespaceOnline()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      return;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>    status.setStatus("Starting cluster schema service");<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>    initClusterSchemaService();<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span><a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    if (this.cpHost != null) {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      try {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        this.cpHost.preMasterInitialization();<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      } catch (IOException e) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      }<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    status.markComplete("Initialization successful");<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    configurationManager.registerObserver(this.balancer);<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>    // Set master as 'initialized'.<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    setInitialized(true);<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    if (maintenanceMode) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      return;<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    status.setStatus("Assign meta replicas");<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    metaBootstrap.assignMetaReplicas();<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    status.setStatus("Starting quota manager");<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    initQuotaManager();<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      // Create the quota snapshot notifier<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      this.quotaObserverChore = new QuotaObserverChore(this, getMasterMetrics());<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      // Start the chore to read the region FS space reports and act on them<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>      getChoreService().scheduleChore(quotaObserverChore);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span><a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.snapshotQuotaChore = new SnapshotQuotaObserverChore(this, getMasterMetrics());<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      // Start the chore to read snapshots and add their usage to table/NS quotas<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>      getChoreService().scheduleChore(snapshotQuotaChore);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span><a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    // clear the dead servers with same host name and port of online server because we are not<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    // removing dead server with same hostname and port of rs which is trying to check in before<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    // master initialization. See HBASE-5916.<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    this.serverManager.clearDeadServersWithSameHostNameAndPortOfOnlineServer();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span><a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    // Check and set the znode ACLs if needed in case we are overtaking a non-secure configuration<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    status.setStatus("Checking ZNode ACLs");<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    zooKeeper.checkAndSetZNodeAcls();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span><a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    status.setStatus("Initializing MOB Cleaner");<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    initMobCleaner();<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    status.setStatus("Calling postStartMaster coprocessors");<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    if (this.cpHost != null) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      // don't let cp initialization errors kill the master<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      try {<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>        this.cpHost.postStartMaster();<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      } catch (IOException ioe) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>        LOG.error("Coprocessor postStartMaster() hook failed", ioe);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    zombieDetector.interrupt();<a name="line.1187"></a>
+<span class="sourceLineNo">961</span>    checkUnsupportedProcedure(procsByType);<a name="line.961"></a>
+<span class="sourceLineNo">962</span><a name="line.962"></a>
+<span class="sourceLineNo">963</span>    // Create Assignment Manager<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    this.assignmentManager = createAssignmentManager(this);<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    this.assignmentManager.start();<a name="line.965"></a>
+<span class="sourceLineNo">966</span>    // TODO: TRSP can perform as the sub procedure for other procedures, so even if it is marked as<a name="line.966"></a>
+<span class="sourceLineNo">967</span>    // completed, it could still be in the procedure list. This is a bit strange but is another<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    // story, need to verify the implementation for ProcedureExecutor and ProcedureStore.<a name="line.968"></a>
+<span class="sourceLineNo">969</span>    List&lt;TransitRegionStateProcedure&gt; ritList =<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      procsByType.getOrDefault(TransitRegionStateProcedure.class, Collections.emptyList()).stream()<a name="line.970"></a>
+<span class="sourceLineNo">971</span>        .filter(p -&gt; !p.isFinished()).map(p -&gt; (TransitRegionStateProcedure) p)<a name="line.971"></a>
+<span class="sourceLineNo">972</span>        .collect(Collectors.toList());<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    this.assignmentManager.setupRIT(ritList);<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    // Start RegionServerTracker with listing of servers found with exiting SCPs -- these should<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    // be registered in the deadServers set -- and with the list of servernames out on the<a name="line.976"></a>
+<span class="sourceLineNo">977</span>    // filesystem that COULD BE 'alive' (we'll schedule SCPs for each and let SCP figure it out).<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    // We also pass dirs that are already 'splitting'... so we can do some checks down in tracker.<a name="line.978"></a>
+<span class="sourceLineNo">979</span>    // TODO: Generate the splitting and live Set in one pass instead of two as we currently do.<a name="line.979"></a>
+<span class="sourceLineNo">980</span>    this.regionServerTracker = new RegionServerTracker(zooKeeper, this, this.serverManager);<a name="line.980"></a>
+<span class="sourceLineNo">981</span>    this.regionServerTracker.start(<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      procsByType.getOrDefault(ServerCrashProcedure.class, Collections.emptyList()).stream()<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        .map(p -&gt; (ServerCrashProcedure) p).map(p -&gt; p.getServerName()).collect(Collectors.toSet()),<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      walManager.getLiveServersFromWALDir(), walManager.getSplittingServersFromWALDir());<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    // This manager will be started AFTER hbase:meta is confirmed on line.<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    // hbase.mirror.table.state.to.zookeeper is so hbase1 clients can connect. They read table<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    // state from zookeeper while hbase2 reads it from hbase:meta. Disable if no hbase1 clients.<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    this.tableStateManager =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      this.conf.getBoolean(MirroringTableStateManager.MIRROR_TABLE_STATE_TO_ZK_KEY, true)<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        ?<a name="line.990"></a>
+<span class="sourceLineNo">991</span>        new MirroringTableStateManager(this):<a name="line.991"></a>
+<span class="sourceLineNo">992</span>        new TableStateManager(this);<a name="line.992"></a>
+<span class="sourceLineNo">993</span><a name="line.993"></a>
+<span class="sourceLineNo">994</span>    status.setStatus("Initializing ZK system trackers");<a name="line.994"></a>
+<span class="sourceLineNo">995</span>    initializeZKBasedSystemTrackers();<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    status.setStatus("Loading last flushed sequence id of regions");<a name="line.996"></a>
+<span class="sourceLineNo">997</span>    try {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      this.serverManager.loadLastFlushedSequenceIds();<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    } catch (IOException e) {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      LOG.debug("Failed to load last flushed sequence id of regions"<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          + " from file system", e);<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    // Set ourselves as active Master now our claim has succeeded up in zk.<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>    this.activeMaster = true;<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span><a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    // This is for backwards compatibility<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    // See HBASE-11393<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    status.setStatus("Update TableCFs node in ZNode");<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    ReplicationPeerConfigUpgrader tableCFsUpdater =<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        new ReplicationPeerConfigUpgrader(zooKeeper, conf);<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>    tableCFsUpdater.copyTableCFs();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span><a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>    if (!maintenanceMode) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>      // Add the Observer to delete quotas on table deletion before starting all CPs by<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // default with quota support, avoiding if user specifically asks to not load this Observer.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>        updateConfigurationForQuotasObserver(conf);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      // initialize master side coprocessors before we start handling requests<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>      status.setStatus("Initializing master coprocessors");<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      this.cpHost = new MasterCoprocessorHost(this, this.conf);<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    }<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span><a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    // Checking if meta needs initializing.<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    status.setStatus("Initializing meta table if this is a new deploy");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    InitMetaProcedure initMetaProc = null;<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>    // Print out state of hbase:meta on startup; helps debugging.<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>    RegionState rs = this.assignmentManager.getRegionStates().<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        getRegionState(RegionInfoBuilder.FIRST_META_REGIONINFO);<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    LOG.info("hbase:meta {}", rs);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (rs.isOffline()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      Optional&lt;InitMetaProcedure&gt; optProc = procedureExecutor.getProcedures().stream()<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>        .filter(p -&gt; p instanceof InitMetaProcedure).map(o -&gt; (InitMetaProcedure) o).findAny();<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>      initMetaProc = optProc.orElseGet(() -&gt; {<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>        // schedule an init meta procedure if meta has not been deployed yet<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>        InitMetaProcedure temp = new InitMetaProcedure();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>        procedureExecutor.submitProcedure(temp);<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>        return temp;<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      });<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    if (this.balancer instanceof FavoredNodesPromoter) {<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>      favoredNodesManager = new FavoredNodesManager(this);<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // initialize load balancer<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    this.balancer.setMasterServices(this);<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    this.balancer.initialize();<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span><a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>    // start up all service threads.<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    status.setStatus("Initializing master service threads");<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    startServiceThreads();<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    // wait meta to be initialized after we start procedure executor<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    if (initMetaProc != null) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      initMetaProc.await();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    }<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    // Wake up this server to check in<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    sleeper.skipSleepCycle();<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span><a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // Wait for region servers to report in.<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // With this as part of master initialization, it precludes our being able to start a single<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    // server that is both Master and RegionServer. Needs more thought. TODO.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    String statusStr = "Wait for region servers to report in";<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    status.setStatus(statusStr);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    LOG.info(Objects.toString(status));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    waitForRegionServers(status);<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span><a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    // Check if master is shutting down because issue initializing regionservers or balancer.<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (isStopped()) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      return;<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span><a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    status.setStatus("Starting assignment manager");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    // FIRST HBASE:META READ!!!!<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>    // The below cannot make progress w/o hbase:meta being online.<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    // This is the FIRST attempt at going to hbase:meta. Meta on-lining is going on in background<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // as procedures run -- in particular SCPs for crashed servers... One should put up hbase:meta<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    // if it is down. It may take a while to come online. So, wait here until meta if for sure<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>    // available. That's what waitForMetaOnline does.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    if (!waitForMetaOnline()) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>      return;<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    this.assignmentManager.joinCluster();<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    // The below depends on hbase:meta being online.<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    this.tableStateManager.start();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // Below has to happen after tablestatemanager has started in the case where this hbase-2.x<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    // is being started over an hbase-1.x dataset. tablestatemanager runs a migration as part<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    // of its 'start' moving table state from zookeeper to hbase:meta. This migration needs to<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    // complete before we do this next step processing offline regions else it fails reading<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    // table states messing up master launch (namespace table, etc., are not assigned).<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    this.assignmentManager.processOfflineRegions();<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    // Initialize after meta is up as below scans meta<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    if (favoredNodesManager != null &amp;&amp; !maintenanceMode) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      SnapshotOfRegionAssignmentFromMeta snapshotOfRegionAssignment =<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          new SnapshotOfRegionAssignmentFromMeta(getConnection());<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>      snapshotOfRegionAssignment.initialize();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      favoredNodesManager.initialize(snapshotOfRegionAssignment);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span><a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    // set cluster status again after user regions are assigned<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    // Start balancer and meta catalog janitor after meta and regions have been assigned.<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>    status.setStatus("Starting balancer and catalog janitor");<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>    this.clusterStatusChore = new ClusterStatusChore(this, balancer);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    getChoreService().scheduleChore(clusterStatusChore);<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    this.balancerChore = new BalancerChore(this);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    getChoreService().scheduleChore(balancerChore);<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    this.normalizerChore = new RegionNormalizerChore(this);<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    getChoreService().scheduleChore(normalizerChore);<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>    this.catalogJanitorChore = new CatalogJanitor(this);<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>    getChoreService().scheduleChore(catalogJanitorChore);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    this.serverManager.startChore();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span><a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>    // NAMESPACE READ!!!!<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    // Here we expect hbase:namespace to be online. See inside initClusterSchemaService.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // TODO: Fix this. Namespace is a pain being a sort-of system table. Fold it in to hbase:meta.<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // isNamespace does like isMeta and waits until namespace is onlined before allowing progress.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    if (!waitForNamespaceOnline()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      return;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    }<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>    status.setStatus("Starting cluster schema service");<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    initClusterSchemaService();<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span><a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    if (this.cpHost != null) {<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>      try {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>        this.cpHost.preMasterInitialization();<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      } catch (IOException e) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>        LOG.error("Coprocessor preMasterInitialization() hook failed", e);<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      }<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    status.markComplete("Initialization successful");<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    LOG.info(String.format("Master has completed initialization %.3fsec",<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>       (System.currentTimeMillis() - masterActiveTime) / 1000.0f));<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    this.masterFinishedInitializationTime = System.currentTimeMillis();<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    configurationManager.registerObserver(this.balancer);<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    configurationManager.registerObserver(this.hfileCleaner);<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>    configurationManager.registerObserver(this.logCleaner);<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    // Set master as 'initialized'.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>    setInitialized(true);<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span><a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (maintenanceMode) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      LOG.info("Detected repair mode, skipping final initialization steps.");<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>      return;<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span><a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>    status.setStatus("Assign meta replicas");<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    MasterMetaBootstrap metaBootstrap = createMetaBootstrap();<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    metaBootstrap.assignMetaReplicas();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>    status.setStatus("Starting quota manager");<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    initQuotaManager();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      // Create the quota snapshot notifier<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>      spaceQuotaSnapshotNotifier = createQuotaSnapshotNotifier();<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>      spaceQuotaSnapshotNotifier.initialize(getClusterConnection());<a name="line.1157"></a>
+<span clas

<TRUNCATED>

[10/11] hbase-site git commit: Published site at 83dc38a1dffed76ea4d36f18409dd5bc86a3e19e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/18058c93/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index 79e7890..c1fece0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -2132,7 +2132,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockListLast">
 <li class="blockList">
 <h4>UNSUPPORTED_PROCEDURES</h4>
-<pre>private static final&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.822">UNSUPPORTED_PROCEDURES</a></pre>
+<pre>private static final&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.821">UNSUPPORTED_PROCEDURES</a></pre>
 </li>
 </ul>
 </li>
@@ -2420,7 +2420,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkUnsupportedProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.832">checkUnsupportedProcedure</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.
 master.procedure">MasterProcedureEnv</a>&gt;&gt;&gt;&nbsp;procsByType)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.831">checkUnsupportedProcedure</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.
 master.procedure">MasterProcedureEnv</a>&gt;&gt;&gt;&nbsp;procsByType)
                                 throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">In HBASE-20811, we have introduced a new TRSP to assign/unassign/move regions, and it is
  incompatible with the old AssignProcedure/UnassignProcedure/MoveRegionProcedure. So we need to
@@ -2438,7 +2438,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createAssignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.863">createAssignmentManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.862">createAssignmentManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)</pre>
 </li>
 </ul>
 <a name="finishActiveMasterInitialization-org.apache.hadoop.hbase.monitoring.MonitoredTask-">
@@ -2447,7 +2447,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>finishActiveMasterInitialization</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.904">finishActiveMasterInitialization</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.903">finishActiveMasterInitialization</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                               org.apache.zookeeper.KeeperException,
@@ -2502,7 +2502,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMetaOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1207">waitForMetaOnline</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1209">waitForMetaOnline</a>()
                           throws <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>
 <div class="block">Check hbase:meta is up and ready for reading. For use during Master startup only.</div>
 <dl>
@@ -2520,7 +2520,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionOnline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1215">isRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1217">isRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)
                         throws <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>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2537,7 +2537,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForNamespaceOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1248">waitForNamespaceOnline</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1250">waitForNamespaceOnline</a>()
                                throws <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>
 <div class="block">Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table
  (TODO: Fix this! NS should not hold-up startup).</div>
@@ -2555,7 +2555,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfigurationForQuotasObserver</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1268">updateConfigurationForQuotasObserver</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1270">updateConfigurationForQuotasObserver</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Adds the <code>MasterQuotasObserver</code> to the list of configured Master observers to
  automatically remove quotas for a table when that table is deleted.</div>
 </li>
@@ -2566,7 +2566,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initMobCleaner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1285">initMobCleaner</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1287">initMobCleaner</a>()</pre>
 </li>
 </ul>
 <a name="createMetaBootstrap--">
@@ -2575,7 +2575,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createMetaBootstrap</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1310">createMetaBootstrap</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1312">createMetaBootstrap</a>()</pre>
 <div class="block"><p>
  Create a <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master"><code>MasterMetaBootstrap</code></a> instance.
  </p>
@@ -2590,7 +2590,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createServerManager</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1325">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1327">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
                                      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"><p>
  Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.
@@ -2610,7 +2610,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForRegionServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1332">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1334">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -2626,7 +2626,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initClusterSchemaService</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1339">initClusterSchemaService</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1341">initClusterSchemaService</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>,
                                         <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>
 <dl>
@@ -2642,7 +2642,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initQuotaManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1351">initQuotaManager</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1353">initQuotaManager</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>
@@ -2656,7 +2656,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createQuotaSnapshotNotifier</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1357">createQuotaSnapshotNotifier</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1359">createQuotaSnapshotNotifier</a>()</pre>
 </li>
 </ul>
 <a name="isCatalogJanitorEnabled--">
@@ -2665,7 +2665,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogJanitorEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1363">isCatalogJanitorEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1365">isCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
 <a name="isCleanerChoreEnabled--">
@@ -2674,7 +2674,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCleanerChoreEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1368">isCleanerChoreEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1370">isCleanerChoreEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getServerManager--">
@@ -2683,7 +2683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1383">getServerManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1385">getServerManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getServerManager--">getServerManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2698,7 +2698,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFileSystem</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1388">getMasterFileSystem</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1390">getMasterFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterFileSystem--">getMasterFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2713,7 +2713,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterWalManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1393">getMasterWalManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1395">getMasterWalManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterWalManager--">getMasterWalManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2728,7 +2728,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1398">getTableStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1400">getTableStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getTableStateManager--">getTableStateManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2743,7 +2743,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startServiceThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1409">startServiceThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1411">startServiceThreads</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>
@@ -2757,7 +2757,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1459">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1461">stopServiceThreads</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stopServiceThreads--">HRegionServer</a></code></span></div>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
@@ -2773,7 +2773,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1507">createProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1509">createProcedureExecutor</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>
@@ -2787,7 +2787,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1536">startProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1538">startProcedureExecutor</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>
@@ -2801,7 +2801,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1540">stopProcedureExecutor</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1542">stopProcedureExecutor</a>()</pre>
 </li>
 </ul>
 <a name="stopChores--">
@@ -2810,7 +2810,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopChores</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1555">stopChores</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1557">stopChores</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteInetAddress-int-long-">
@@ -2819,7 +2819,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteInetAddress</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1575">getRemoteInetAddress</a>(int&nbsp;port,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1577">getRemoteInetAddress</a>(int&nbsp;port,
                                  long&nbsp;serverStartCode)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl>
@@ -2836,7 +2836,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxBalancingTime</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1595">getMaxBalancingTime</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1597">getMaxBalancingTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum time we should run balancer for</dd>
@@ -2849,7 +2849,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxRegionsInTransition</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1608">getMaxRegionsInTransition</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1610">getMaxRegionsInTransition</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum number of regions in transition</dd>
@@ -2862,7 +2862,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceThrottling</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1620">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1622">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
                                int&nbsp;maxRegionsInTransition,
                                long&nbsp;cutoffTime)</pre>
 <div class="block">It first sleep to the next balance plan start time. Meanwhile, throttling by the max
@@ -2881,7 +2881,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1651">balance</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1653">balance</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>
@@ -2895,7 +2895,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1655">balance</a>(boolean&nbsp;force)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1657">balance</a>(boolean&nbsp;force)
                 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>
@@ -2909,7 +2909,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNormalizer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1777">getRegionNormalizer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1779">getRegionNormalizer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionNormalizer--">getRegionNormalizer</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2924,7 +2924,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizeRegions</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1788">normalizeRegions</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1790">normalizeRegions</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">Perform normalization of cluster (invoked by <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer"><code>RegionNormalizerChore</code></a>).</div>
 <dl>
@@ -2943,7 +2943,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClientIdAuditPrefix</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1848">getClientIdAuditPrefix</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1850">getClientIdAuditPrefix</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2958,7 +2958,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1859">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1861">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
 <div class="block">Switch for the background CatalogJanitor thread.
  Used for testing.  The thread will continue to run.  It will just be a noop
  if disabled.</div>
@@ -2974,7 +2974,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegions</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1864">mergeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1866">mergeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
                          boolean&nbsp;forcible,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3002,7 +3002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1912">splitRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1914">splitRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                         byte[]&nbsp;splitRow,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3030,7 +3030,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>move</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1938">move</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1940">move</a>(byte[]&nbsp;encodedRegionName,
                  byte[]&nbsp;destServerName)
           throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
@@ -3045,7 +3045,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2028">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2030">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                         byte[][]&nbsp;splitKeys,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3070,7 +3070,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createSystemTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2070">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2072">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor)
                        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 interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">MasterServices</a></code></span></div>
 <div class="block">Create a system table using the given table definition.</div>
@@ -3091,7 +3091,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>sanityCheckTableDescriptor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2098">sanityCheckTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2100">sanityCheckTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                                  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">Checks whether the table conforms to some sane limits, and configured
  values (compression, etc) work. Throws an exception if something is wrong.</div>
@@ -3107,7 +3107,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReplicationScope</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2215">checkReplicationScope</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2217">checkReplicationScope</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                             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>
@@ -3121,7 +3121,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompactionPolicy</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2227">checkCompactionPolicy</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2229">checkCompactionPolicy</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                    <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                             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>
@@ -3136,7 +3136,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkBloomFilterType</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2284">checkBloomFilterType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;cfd)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2286">checkBloomFilterType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;cfd)
                                   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>
@@ -3150,7 +3150,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>warnOrThrowExceptionForFailure</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2295">warnOrThrowExceptionForFailure</a>(boolean&nbsp;logWarn,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2297">warnOrThrowExceptionForFailure</a>(boolean&nbsp;logWarn,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;confKey,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                                                    <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>&nbsp;cause)
@@ -3167,7 +3167,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startActiveMasterManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2304">startActiveMasterManager</a>(int&nbsp;infoPort)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2306">startActiveMasterManager</a>(int&nbsp;infoPort)
                                throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3181,7 +3181,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompression</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2357">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2359">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                        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>
@@ -3195,7 +3195,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompression</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2365">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2367">checkCompression</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                        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>
@@ -3209,7 +3209,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEncryption</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2372">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2374">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                       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>
@@ -3224,7 +3224,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEncryption</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2380">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2382">checkEncryption</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;hcd)
                       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>
@@ -3239,7 +3239,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkClassLoading</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2386">checkClassLoading</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2388">checkClassLoading</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)
                         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>
@@ -3254,7 +3254,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogTable</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2392">isCatalogTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2394">isCatalogTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="deleteTable-org.apache.hadoop.hbase.TableName-long-long-">
@@ -3263,7 +3263,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2397">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2399">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  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>
@@ -3285,7 +3285,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2431">truncateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2433">truncateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                           boolean&nbsp;preserveSplits,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)
@@ -3309,7 +3309,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2461">addColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2463">addColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;column,
                       long&nbsp;nonceGroup,
                       long&nbsp;nonce)
@@ -3333,7 +3333,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2489">modifyColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2491">modifyColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;descriptor,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3357,7 +3357,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2509">deleteColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2511">deleteColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;columnName,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3381,7 +3381,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>enableTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2534">enableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2536">enableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  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>
@@ -3403,7 +3403,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>disableTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2587">disableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2589">disableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
                   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>
@@ -3425,7 +3425,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionForRow</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2629">getTableRegionForRow</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2631">getTableRegionForRow</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                  byte[]&nbsp;rowKey)
                                           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">Return the region and current deployment for the region containing
@@ -3444,7 +3444,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyTable</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2655">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2657">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html" title="interface in org.apache.hadoop.hbase.master">HMaster.TableDescriptorGetter</a>&nbsp;newDescriptorGetter,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3461,7 +3461,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2693">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2695">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3485,7 +3485,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2705">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2707">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
                             long&nbsp;nonceGroup,
                             long&nbsp;nonce,
                             boolean&nbsp;restoreAcl)
@@ -3502,7 +3502,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableExists</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2729">checkTableExists</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2731">checkTableExists</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                        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/TableNotFoundException.html" title="class in org.apache.hadoop.hbase">TableNotFoundException</a></pre>
 <dl>
@@ -3518,7 +3518,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableModifiable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2737">checkTableModifiable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2739">checkTableModifiable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                           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/TableNotFoundException.html" title="class in org.apache.hadoop.hbase">TableNotFoundException</a>,
                                  <a href="../../../../../org/apache/hadoop/hbase/TableNotDisabledException.html" title="class in org.apache.hadoop.hbase">TableNotDisabledException</a></pre>
@@ -3542,7 +3542,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetricsWithoutCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2749">getClusterMetricsWithoutCoprocessor</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2751">getClusterMetricsWithoutCoprocessor</a>()
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3556,7 +3556,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetricsWithoutCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2753">getClusterMetricsWithoutCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2755">getClusterMetricsWithoutCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3570,7 +3570,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2815">getClusterMetrics</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2817">getClusterMetrics</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="returnLabel">Returns:</span></dt>
@@ -3586,7 +3586,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2819">getClusterMetrics</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2821">getClusterMetrics</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase">ClusterMetrics.Option</a>&gt;&nbsp;options)
                                  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>
@@ -3600,7 +3600,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupMasters</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2830">getBackupMasters</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2832">getBackupMasters</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3614,7 +3614,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadedCoprocessors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2883">getLoadedCoprocessors</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2885">getLoadedCoprocessors</a>()</pre>
 <div class="block">The set of loaded coprocessors is stored in a static set. Since it's
  statically allocated, it does not require that HMaster's cpHost be
  initialized prior to accessing it.</div>
@@ -3630,7 +3630,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2890">getMasterStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2892">getMasterStartTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster was started.</dd>
@@ -3643,7 +3643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterActiveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2897">getMasterActiveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2899">getMasterActiveTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster became the active master.</dd>
@@ -3656,7 +3656,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFinishedInitializationTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2904">getMasterFinishedInitializationTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2906">getMasterFinishedInitializationTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster finished becoming the active master</dd>
@@ -3669,7 +3669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumWALFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2908">getNumWALFiles</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2910">getNumWALFiles</a>()</pre>
 </li>
 </ul>
 <a name="getWalProcedureStore--">
@@ -3678,7 +3678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2912">getWalProcedureStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2914">getWalProcedureStore</a>()</pre>
 </li>
 </ul>
 <a name="getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">
@@ -3687,7 +3687,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerInfoPort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2916">getRegionServerInfoPort</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2918">getRegionServerInfoPort</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 </li>
 </ul>
 <a name="getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">
@@ -3696,7 +3696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerVersion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2923">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2925">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3709,7 +3709,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIfShouldMoveSystemRegionAsync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2930">checkIfShouldMoveSystemRegionAsync</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2932">checkIfShouldMoveSystemRegionAsync</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#checkIfShouldMoveSystemRegionAsync--">MasterServices</a></code></span></div>
 <div class="block">Called when a new RegionServer is added to the cluster.
  Checks if new server has a newer version than any existing server and will move system tables
@@ -3726,7 +3726,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterCoprocessors</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2937">getMasterCoprocessors</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2939">getMasterCoprocessors</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>array of coprocessor SimpleNames.</dd>
@@ -3739,7 +3739,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2943">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2945">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-">HRegionServer</a></code></span></div>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log
@@ -3762,7 +3762,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2967">getZooKeeper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2969">getZooKeeper</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getZooKeeper--">Server</a></code></span></div>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 <dl>
@@ -3779,7 +3779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2972">getMasterCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2974">getMasterCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3794,7 +3794,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterQuotaManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2977">getMasterQuotaManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2979">getMasterQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterQuotaManager--">getMasterQuotaManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3809,7 +3809,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterProcedureExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2982">getMasterProcedureExecutor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2984">getMasterProcedureExecutor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3824,7 +3824,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2987">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2989">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getServerName--">getServerName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3841,7 +3841,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2992">getAssignmentManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2994">getAssignmentManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getAssignmentManager--">getAssignmentManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3856,7 +3856,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getCatalogJanitor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2997">getCatalogJanitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2999">getCatalogJanitor</a>()</pre>
 <dl>
 <dt><s

<TRUNCATED>